
(function () {
    var a = this, b = b || {};
    b.WEBGL_RENDERER = 0, b.CANVAS_RENDERER = 1, b.VERSION = "v1.6.1", b.blendModes = {
        NORMAL: 0,
        ADD: 1,
        MULTIPLY: 2,
        SCREEN: 3,
        OVERLAY: 4,
        DARKEN: 5,
        LIGHTEN: 6,
        COLOR_DODGE: 7,
        COLOR_BURN: 8,
        HARD_LIGHT: 9,
        SOFT_LIGHT: 10,
        DIFFERENCE: 11,
        EXCLUSION: 12,
        HUE: 13,
        SATURATION: 14,
        COLOR: 15,
        LUMINOSITY: 16
    }, b.scaleModes = {
        DEFAULT: 0,
        LINEAR: 0,
        NEAREST: 1
    }, b._UID = 0, "undefined" != typeof Float32Array ? (b.Float32Array = Float32Array, b.Uint16Array = Uint16Array) : (b.Float32Array = Array, b.Uint16Array = Array), b.INTERACTION_FREQUENCY = 30, b.AUTO_PREVENT_DEFAULT = !0, b.RAD_TO_DEG = 180 / Math.PI, b.DEG_TO_RAD = Math.PI / 180, b.dontSayHello = !1, b.sayHello = function (a) {
        if (!b.dontSayHello) {
            if (navigator.userAgent.toLowerCase().indexOf("chrome") > -1) {
                var c = ["%c %c %c Pixi.js " + b.VERSION + " - " + a + "  %c  %c  http:///  %c %c ♥%c♥%c♥ ", "background: #ff66a5", "background: #ff66a5", "color: #ff66a5; background: #030307;", "background: #ff66a5", "background: #ffc3dc", "background: #ff66a5", "color: #ff2424; background: #fff", "color: #ff2424; background: #fff", "color: #ff2424; background: #fff"];

            } else window.console && console.log("Pixi.js " + b.VERSION + " - http:///");
            b.dontSayHello = !0
        }
    }, b.Point = function (a, b) {
        this.x = a || 0, this.y = b || 0
    }, b.Point.prototype.clone = function () {
        return new b.Point(this.x, this.y)
    }, b.Point.prototype.set = function (a, b) {
        this.x = a || 0, this.y = b || (0 !== b ? this.x : 0)
    }, b.Point.prototype.constructor = b.Point, b.Rectangle = function (a, b, c, d) {
        this.x = a || 0, this.y = b || 0, this.width = c || 0, this.height = d || 0
    }, b.Rectangle.prototype.clone = function () {
        return new b.Rectangle(this.x, this.y, this.width, this.height)
    }, b.Rectangle.prototype.contains = function (a, b) {
        if (this.width <= 0 || this.height <= 0)return !1;
        var c = this.x;
        if (a >= c && a <= c + this.width) {
            var d = this.y;
            if (b >= d && b <= d + this.height)return !0
        }
        return !1
    }, b.Rectangle.prototype.constructor = b.Rectangle, b.EmptyRectangle = new b.Rectangle(0, 0, 0, 0), b.Polygon = function (a) {
        if (a instanceof Array || (a = Array.prototype.slice.call(arguments)), "number" == typeof a[0]) {
            for (var c = [], d = 0, e = a.length; e > d; d += 2)c.push(new b.Point(a[d], a[d + 1]));
            a = c
        }
        this.points = a
    }, b.Polygon.prototype.clone = function () {
        for (var a = [], c = 0; c < this.points.length; c++)a.push(this.points[c].clone());
        return new b.Polygon(a)
    }, b.Polygon.prototype.contains = function (a, b) {
        for (var c = !1, d = 0, e = this.points.length - 1; d < this.points.length; e = d++) {
            var f = this.points[d].x, g = this.points[d].y, h = this.points[e].x, i = this.points[e].y, j = g > b != i > b && (h - f) * (b - g) / (i - g) + f > a;
            j && (c = !c)
        }
        return c
    }, b.Polygon.prototype.constructor = b.Polygon, b.Circle = function (a, b, c) {
        this.x = a || 0, this.y = b || 0, this.radius = c || 0
    }, b.Circle.prototype.clone = function () {
        return new b.Circle(this.x, this.y, this.radius)
    }, b.Circle.prototype.contains = function (a, b) {
        if (this.radius <= 0)return !1;
        var c = this.x - a, d = this.y - b, e = this.radius * this.radius;
        return c *= c, d *= d, e >= c + d
    }, b.Circle.prototype.getBounds = function () {
        return new b.Rectangle(this.x - this.radius, this.y - this.radius, this.width, this.height)
    }, b.Circle.prototype.constructor = b.Circle, b.Ellipse = function (a, b, c, d) {
        this.x = a || 0, this.y = b || 0, this.width = c || 0, this.height = d || 0
    }, b.Ellipse.prototype.clone = function () {
        return new b.Ellipse(this.x, this.y, this.width, this.height)
    }, b.Ellipse.prototype.contains = function (a, b) {
        if (this.width <= 0 || this.height <= 0)return !1;
        var c = (a - this.x) / this.width, d = (b - this.y) / this.height;
        return c *= c, d *= d, 1 >= c + d
    }, b.Ellipse.prototype.getBounds = function () {
        return new b.Rectangle(this.x - this.width, this.y - this.height, this.width, this.height)
    }, b.Ellipse.prototype.constructor = b.Ellipse, b.Matrix = function () {
        this.a = 1, this.b = 0, this.c = 0, this.d = 1, this.tx = 0, this.ty = 0
    }, b.Matrix.prototype.fromArray = function (a) {
        this.a = a[0], this.b = a[1], this.c = a[3], this.d = a[4], this.tx = a[2], this.ty = a[5]
    }, b.Matrix.prototype.toArray = function (a) {
        this.array || (this.array = new Float32Array(9));
        var b = this.array;
        return a ? (b[0] = this.a, b[1] = this.c, b[2] = 0, b[3] = this.b, b[4] = this.d, b[5] = 0, b[6] = this.tx, b[7] = this.ty, b[8] = 1) : (b[0] = this.a, b[1] = this.b, b[2] = this.tx, b[3] = this.c, b[4] = this.d, b[5] = this.ty, b[6] = 0, b[7] = 0, b[8] = 1), b
    }, b.identityMatrix = new b.Matrix, b.determineMatrixArrayType = function () {
        return "undefined" != typeof Float32Array ? Float32Array : Array
    }, b.Matrix2 = b.determineMatrixArrayType(), b.DisplayObject = function () {
        this.position = new b.Point, this.scale = new b.Point(1, 1), this.pivot = new b.Point(0, 0), this.rotation = 0, this.alpha = 1, this.visible = !0, this.hitArea = null, this.buttonMode = !1, this.renderable = !1, this.parent = null, this.stage = null, this.worldAlpha = 1, this._interactive = !1, this.defaultCursor = "pointer", this.worldTransform = new b.Matrix, this.color = [], this.dynamic = !0, this._sr = 0, this._cr = 1, this.filterArea = null, this._bounds = new b.Rectangle(0, 0, 1, 1), this._currentBounds = null, this._mask = null, this._cacheAsBitmap = !1, this._cacheIsDirty = !1
    }, b.DisplayObject.prototype.constructor = b.DisplayObject, b.DisplayObject.prototype.setInteractive = function (a) {
        this.interactive = a
    }, Object.defineProperty(b.DisplayObject.prototype, "interactive", {
        get: function () {
            return this._interactive
        }, set: function (a) {
            this._interactive = a, this.stage && (this.stage.dirty = !0)
        }
    }), Object.defineProperty(b.DisplayObject.prototype, "worldVisible", {
        get: function () {
            var a = this;
            do {
                if (!a.visible)return !1;
                a = a.parent
            } while (a);
            return !0
        }
    }), Object.defineProperty(b.DisplayObject.prototype, "mask", {
        get: function () {
            return this._mask
        }, set: function (a) {
            this._mask && (this._mask.isMask = !1), this._mask = a, this._mask && (this._mask.isMask = !0)
        }
    }), Object.defineProperty(b.DisplayObject.prototype, "filters", {
        get: function () {
            return this._filters
        }, set: function (a) {
            if (a) {
                for (var b = [], c = 0; c < a.length; c++)for (var d = a[c].passes, e = 0; e < d.length; e++)b.push(d[e]);
                this._filterBlock = {target: this, filterPasses: b}
            }
            this._filters = a
        }
    }), Object.defineProperty(b.DisplayObject.prototype, "cacheAsBitmap", {
        get: function () {
            return this._cacheAsBitmap
        }, set: function (a) {
            this._cacheAsBitmap !== a && (a ? this._generateCachedSprite() : this._destroyCachedSprite(), this._cacheAsBitmap = a)
        }
    }), b.DisplayObject.prototype.updateTransform = function () {
        this.rotation !== this.rotationCache && (this.rotationCache = this.rotation, this._sr = Math.sin(this.rotation), this._cr = Math.cos(this.rotation));
        var a = this.parent.worldTransform, b = this.worldTransform, c = this.pivot.x, d = this.pivot.y, e = this._cr * this.scale.x, f = -this._sr * this.scale.y, g = this._sr * this.scale.x, h = this._cr * this.scale.y, i = this.position.x - e * c - d * f, j = this.position.y - h * d - c * g, k = a.a, l = a.b, m = a.c, n = a.d;
        b.a = k * e + l * g, b.b = k * f + l * h, b.tx = k * i + l * j + a.tx, b.c = m * e + n * g, b.d = m * f + n * h, b.ty = m * i + n * j + a.ty, this.worldAlpha = this.alpha * this.parent.worldAlpha
    }, b.DisplayObject.prototype.getBounds = function (a) {
        return a = a, b.EmptyRectangle
    }, b.DisplayObject.prototype.getLocalBounds = function () {
        return this.getBounds(b.identityMatrix)
    }, b.DisplayObject.prototype.setStageReference = function (a) {
        this.stage = a, this._interactive && (this.stage.dirty = !0)
    }, b.DisplayObject.prototype.generateTexture = function (a) {
        var c = this.getLocalBounds(), d = new b.RenderTexture(0 | c.width, 0 | c.height, a);
        return d.render(this, new b.Point(-c.x, -c.y)), d
    }, b.DisplayObject.prototype.updateCache = function () {
        this._generateCachedSprite()
    }, b.DisplayObject.prototype._renderCachedSprite = function (a) {
        this._cachedSprite.worldAlpha = this.worldAlpha, a.gl ? b.Sprite.prototype._renderWebGL.call(this._cachedSprite, a) : b.Sprite.prototype._renderCanvas.call(this._cachedSprite, a)
    }, b.DisplayObject.prototype._generateCachedSprite = function () {
        this._cacheAsBitmap = !1;
        var a = this.getLocalBounds();
        if (this._cachedSprite)this._cachedSprite.texture.resize(0 | a.width, 0 | a.height); else {
            var c = new b.RenderTexture(0 | a.width, 0 | a.height);
            this._cachedSprite = new b.Sprite(c), this._cachedSprite.worldTransform = this.worldTransform
        }
        var d = this._filters;
        this._filters = null, this._cachedSprite.filters = d, this._cachedSprite.texture.render(this, new b.Point(-a.x, -a.y)), this._cachedSprite.anchor.x = -(a.x / a.width), this._cachedSprite.anchor.y = -(a.y / a.height), this._filters = d, this._cacheAsBitmap = !0
    }, b.DisplayObject.prototype._destroyCachedSprite = function () {
        this._cachedSprite && (this._cachedSprite.texture.destroy(!0), this._cachedSprite = null)
    }, b.DisplayObject.prototype._renderWebGL = function (a) {
        a = a
    }, b.DisplayObject.prototype._renderCanvas = function (a) {
        a = a
    }, Object.defineProperty(b.DisplayObject.prototype, "x", {
        get: function () {
            return this.position.x
        }, set: function (a) {
            this.position.x = a
        }
    }), Object.defineProperty(b.DisplayObject.prototype, "y", {
        get: function () {
            return this.position.y
        }, set: function (a) {
            this.position.y = a
        }
    }), b.DisplayObjectContainer = function () {
        b.DisplayObject.call(this), this.children = []
    }, b.DisplayObjectContainer.prototype = Object.create(b.DisplayObject.prototype), b.DisplayObjectContainer.prototype.constructor = b.DisplayObjectContainer, Object.defineProperty(b.DisplayObjectContainer.prototype, "width", {
        get: function () {
            return this.scale.x * this.getLocalBounds().width
        }, set: function (a) {
            var b = this.getLocalBounds().width;
            this.scale.x = 0 !== b ? a / (b / this.scale.x) : 1, this._width = a
        }
    }), Object.defineProperty(b.DisplayObjectContainer.prototype, "height", {
        get: function () {
            return this.scale.y * this.getLocalBounds().height
        }, set: function (a) {
            var b = this.getLocalBounds().height;
            this.scale.y = 0 !== b ? a / (b / this.scale.y) : 1, this._height = a
        }
    }), b.DisplayObjectContainer.prototype.addChild = function (a) {
        return this.addChildAt(a, this.children.length)
    }, b.DisplayObjectContainer.prototype.addChildAt = function (a, b) {
        if (b >= 0 && b <= this.children.length)return a.parent && a.parent.removeChild(a), a.parent = this, this.children.splice(b, 0, a), this.stage && a.setStageReference(this.stage), a;
        throw new Error(a + " The index " + b + " supplied is out of bounds " + this.children.length)
    }, b.DisplayObjectContainer.prototype.swapChildren = function (a, b) {
        if (a !== b) {
            var c = this.children.indexOf(a), d = this.children.indexOf(b);
            if (0 > c || 0 > d)throw new Error("swapChildren: Both the supplied DisplayObjects must be a child of the caller.");
            this.children[c] = b, this.children[d] = a
        }
    }, b.DisplayObjectContainer.prototype.getChildAt = function (a) {
        if (a >= 0 && a < this.children.length)return this.children[a];
        throw new Error("Supplied index does not exist in the child list, or the supplied DisplayObject must be a child of the caller")
    }, b.DisplayObjectContainer.prototype.removeChild = function (a) {
        return this.removeChildAt(this.children.indexOf(a))
    }, b.DisplayObjectContainer.prototype.removeChildAt = function (a) {
        var b = this.getChildAt(a);
        return this.stage && b.removeStageReference(), b.parent = void 0, this.children.splice(a, 1), b
    }, b.DisplayObjectContainer.prototype.removeChildren = function (a, b) {
        var c = a || 0, d = "number" == typeof b ? b : this.children.length, e = d - c;
        if (e > 0 && d >= e) {
            for (var f = this.children.splice(c, e), g = 0; g < f.length; g++) {
                var h = f[g];
                this.stage && h.removeStageReference(), h.parent = void 0
            }
            return f
        }
        throw new Error("Range Error, numeric values are outside the acceptable range")
    }, b.DisplayObjectContainer.prototype.updateTransform = function () {
        if (this.visible && (b.DisplayObject.prototype.updateTransform.call(this), !this._cacheAsBitmap))for (var a = 0, c = this.children.length; c > a; a++)this.children[a].updateTransform()
    }, b.DisplayObjectContainer.prototype.getBounds = function (a) {
        if (0 === this.children.length)return b.EmptyRectangle;
        if (a) {
            var c = this.worldTransform;
            this.worldTransform = a, this.updateTransform(), this.worldTransform = c
        }
        for (var d, e, f, g = 1 / 0, h = 1 / 0, i = -1 / 0, j = -1 / 0, k = !1, l = 0, m = this.children.length; m > l; l++) {
            var n = this.children[l];
            n.visible && (k = !0, d = this.children[l].getBounds(a), g = g < d.x ? g : d.x, h = h < d.y ? h : d.y, e = d.width + d.x, f = d.height + d.y, i = i > e ? i : e, j = j > f ? j : f)
        }
        if (!k)return b.EmptyRectangle;
        var o = this._bounds;
        return o.x = g, o.y = h, o.width = i - g, o.height = j - h, o
    }, b.DisplayObjectContainer.prototype.getLocalBounds = function () {
        var a = this.worldTransform;
        this.worldTransform = b.identityMatrix;
        for (var c = 0, d = this.children.length; d > c; c++)this.children[c].updateTransform();
        var e = this.getBounds();
        return this.worldTransform = a, e
    }, b.DisplayObjectContainer.prototype.setStageReference = function (a) {
        this.stage = a, this._interactive && (this.stage.dirty = !0);
        for (var b = 0, c = this.children.length; c > b; b++) {
            var d = this.children[b];
            d.setStageReference(a)
        }
    }, b.DisplayObjectContainer.prototype.removeStageReference = function () {
        for (var a = 0, b = this.children.length; b > a; a++) {
            var c = this.children[a];
            c.removeStageReference()
        }
        this._interactive && (this.stage.dirty = !0), this.stage = null
    }, b.DisplayObjectContainer.prototype._renderWebGL = function (a) {
        if (this.visible && !(this.alpha <= 0)) {
            if (this._cacheAsBitmap)return this._renderCachedSprite(a), void 0;
            var b, c;
            if (this._mask || this._filters) {
                for (this._filters && (a.spriteBatch.flush(), a.filterManager.pushFilter(this._filterBlock)), this._mask && (a.spriteBatch.stop(), a.maskManager.pushMask(this.mask, a), a.spriteBatch.start()), b = 0, c = this.children.length; c > b; b++)this.children[b]._renderWebGL(a);
                a.spriteBatch.stop(), this._mask && a.maskManager.popMask(this._mask, a), this._filters && a.filterManager.popFilter(), a.spriteBatch.start()
            } else for (b = 0, c = this.children.length; c > b; b++)this.children[b]._renderWebGL(a)
        }
    }, b.DisplayObjectContainer.prototype._renderCanvas = function (a) {
        if (this.visible !== !1 && 0 !== this.alpha) {
            if (this._cacheAsBitmap)return this._renderCachedSprite(a), void 0;
            this._mask && a.maskManager.pushMask(this._mask, a.context);
            for (var b = 0, c = this.children.length; c > b; b++) {
                var d = this.children[b];
                d._renderCanvas(a)
            }
            this._mask && a.maskManager.popMask(a.context)
        }
    }, b.Sprite = function (a) {
        b.DisplayObjectContainer.call(this), this.anchor = new b.Point, this.texture = a, this._width = 0, this._height = 0, this.tint = 16777215, this.blendMode = b.blendModes.NORMAL, a.baseTexture.hasLoaded ? this.onTextureUpdate() : (this.onTextureUpdateBind = this.onTextureUpdate.bind(this), this.texture.addEventListener("update", this.onTextureUpdateBind)), this.renderable = !0
    }, b.Sprite.prototype = Object.create(b.DisplayObjectContainer.prototype), b.Sprite.prototype.constructor = b.Sprite, Object.defineProperty(b.Sprite.prototype, "width", {
        get: function () {
            return this.scale.x * this.texture.frame.width
        }, set: function (a) {
            this.scale.x = a / this.texture.frame.width, this._width = a
        }
    }), Object.defineProperty(b.Sprite.prototype, "height", {
        get: function () {
            return this.scale.y * this.texture.frame.height
        }, set: function (a) {
            this.scale.y = a / this.texture.frame.height, this._height = a
        }
    }), b.Sprite.prototype.setTexture = function (a) {
        this.texture = a, this.cachedTint = 16777215
    }, b.Sprite.prototype.onTextureUpdate = function () {
        this._width && (this.scale.x = this._width / this.texture.frame.width), this._height && (this.scale.y = this._height / this.texture.frame.height)
    }, b.Sprite.prototype.getBounds = function (a) {
        var b = this.texture.frame.width, c = this.texture.frame.height, d = b * (1 - this.anchor.x), e = b * -this.anchor.x, f = c * (1 - this.anchor.y), g = c * -this.anchor.y, h = a || this.worldTransform, i = h.a, j = h.c, k = h.b, l = h.d, m = h.tx, n = h.ty, o = i * e + k * g + m, p = l * g + j * e + n, q = i * d + k * g + m, r = l * g + j * d + n, s = i * d + k * f + m, t = l * f + j * d + n, u = i * e + k * f + m, v = l * f + j * e + n, w = -1 / 0, x = -1 / 0, y = 1 / 0, z = 1 / 0;
        y = y > o ? o : y, y = y > q ? q : y, y = y > s ? s : y, y = y > u ? u : y, z = z > p ? p : z, z = z > r ? r : z, z = z > t ? t : z, z = z > v ? v : z, w = o > w ? o : w, w = q > w ? q : w, w = s > w ? s : w, w = u > w ? u : w, x = p > x ? p : x, x = r > x ? r : x, x = t > x ? t : x, x = v > x ? v : x;
        var A = this._bounds;
        return A.x = y, A.width = w - y, A.y = z, A.height = x - z, this._currentBounds = A, A
    }, b.Sprite.prototype._renderWebGL = function (a) {
        if (this.visible && !(this.alpha <= 0)) {
            var b, c;
            if (this._mask || this._filters) {
                var d = a.spriteBatch;
                for (this._filters && (d.flush(), a.filterManager.pushFilter(this._filterBlock)), this._mask && (d.stop(), a.maskManager.pushMask(this.mask, a), d.start()), d.render(this), b = 0, c = this.children.length; c > b; b++)this.children[b]._renderWebGL(a);
                d.stop(), this._mask && a.maskManager.popMask(this._mask, a), this._filters && a.filterManager.popFilter(), d.start()
            } else for (a.spriteBatch.render(this), b = 0, c = this.children.length; c > b; b++)this.children[b]._renderWebGL(a)
        }
    }, b.Sprite.prototype._renderCanvas = function (a) {
        if (this.visible !== !1 && 0 !== this.alpha) {
            if (this.blendMode !== a.currentBlendMode && (a.currentBlendMode = this.blendMode, a.context.globalCompositeOperation = b.blendModesCanvas[a.currentBlendMode]), this._mask && a.maskManager.pushMask(this._mask, a.context), this.texture.valid) {
                a.context.globalAlpha = this.worldAlpha, a.roundPixels ? a.context.setTransform(this.worldTransform.a, this.worldTransform.c, this.worldTransform.b, this.worldTransform.d, 0 | this.worldTransform.tx, 0 | this.worldTransform.ty) : a.context.setTransform(this.worldTransform.a, this.worldTransform.c, this.worldTransform.b, this.worldTransform.d, this.worldTransform.tx, this.worldTransform.ty), a.smoothProperty && a.scaleMode !== this.texture.baseTexture.scaleMode && (a.scaleMode = this.texture.baseTexture.scaleMode, a.context[a.smoothProperty] = a.scaleMode === b.scaleModes.LINEAR);
                var c = this.texture.trim ? this.texture.trim.x - this.anchor.x * this.texture.trim.width : this.anchor.x * -this.texture.frame.width, d = this.texture.trim ? this.texture.trim.y - this.anchor.y * this.texture.trim.height : this.anchor.y * -this.texture.frame.height;
                16777215 !== this.tint ? (this.cachedTint !== this.tint && (this.cachedTint = this.tint, this.tintedTexture = b.CanvasTinter.getTintedTexture(this, this.tint)), a.context.drawImage(this.tintedTexture, 0, 0, this.texture.crop.width, this.texture.crop.height, c, d, this.texture.crop.width, this.texture.crop.height)) : a.context.drawImage(this.texture.baseTexture.source, this.texture.crop.x, this.texture.crop.y, this.texture.crop.width, this.texture.crop.height, c, d, this.texture.crop.width, this.texture.crop.height)
            }
            for (var e = 0, f = this.children.length; f > e; e++)this.children[e]._renderCanvas(a);
            this._mask && a.maskManager.popMask(a.context)
        }
    }, b.Sprite.fromFrame = function (a) {
        var c = b.TextureCache[a];
        if (!c)throw new Error('The frameId "' + a + '" does not exist in the texture cache' + this);
        return new b.Sprite(c)
    }, b.Sprite.fromImage = function (a, c, d) {
        var e = b.Texture.fromImage(a, c, d);
        return new b.Sprite(e)
    }, b.SpriteBatch = function (a) {
        b.DisplayObjectContainer.call(this), this.textureThing = a, this.ready = !1
    }, b.SpriteBatch.prototype = Object.create(b.DisplayObjectContainer.prototype), b.SpriteBatch.constructor = b.SpriteBatch, b.SpriteBatch.prototype.initWebGL = function (a) {
        this.fastSpriteBatch = new b.WebGLFastSpriteBatch(a), this.ready = !0
    }, b.SpriteBatch.prototype.updateTransform = function () {
        b.DisplayObject.prototype.updateTransform.call(this)
    }, b.SpriteBatch.prototype._renderWebGL = function (a) {
        !this.visible || this.alpha <= 0 || !this.children.length || (this.ready || this.initWebGL(a.gl), a.spriteBatch.stop(), a.shaderManager.setShader(a.shaderManager.fastShader), this.fastSpriteBatch.begin(this, a), this.fastSpriteBatch.render(this), a.spriteBatch.start())
    }, b.SpriteBatch.prototype._renderCanvas = function (a) {
        var c = a.context;
        c.globalAlpha = this.worldAlpha, b.DisplayObject.prototype.updateTransform.call(this);
        for (var d = this.worldTransform, e = !0, f = 0; f < this.children.length; f++) {
            var g = this.children[f];
            if (g.visible) {
                var h = g.texture, i = h.frame;
                if (c.globalAlpha = this.worldAlpha * g.alpha, g.rotation % (2 * Math.PI) === 0)e && (c.setTransform(d.a, d.c, d.b, d.d, d.tx, d.ty), e = !1), c.drawImage(h.baseTexture.source, i.x, i.y, i.width, i.height, g.anchor.x * -i.width * g.scale.x + g.position.x + .5 | 0, g.anchor.y * -i.height * g.scale.y + g.position.y + .5 | 0, i.width * g.scale.x, i.height * g.scale.y); else {
                    e || (e = !0), b.DisplayObject.prototype.updateTransform.call(g);
                    var j = g.worldTransform;
                    a.roundPixels ? c.setTransform(j.a, j.c, j.b, j.d, 0 | j.tx, 0 | j.ty) : c.setTransform(j.a, j.c, j.b, j.d, j.tx, j.ty), c.drawImage(h.baseTexture.source, i.x, i.y, i.width, i.height, g.anchor.x * -i.width + .5 | 0, g.anchor.y * -i.height + .5 | 0, i.width, i.height)
                }
            }
        }
    },b.MovieClip = function (a) {
        b.Sprite.call(this, a[0]), this.textures = a, this.animationSpeed = 1, this.loop = !0, this.onComplete = null, this.currentFrame = 0, this.playing = !1
    },b.MovieClip.prototype = Object.create(b.Sprite.prototype),b.MovieClip.prototype.constructor = b.MovieClip,Object.defineProperty(b.MovieClip.prototype, "totalFrames", {
        get: function () {
            return this.textures.length
        }
    }),b.MovieClip.prototype.stop = function () {
        this.playing = !1
    },b.MovieClip.prototype.play = function () {
        this.playing = !0
    },b.MovieClip.prototype.gotoAndStop = function (a) {
        this.playing = !1, this.currentFrame = a;
        var b = this.currentFrame + .5 | 0;
        this.setTexture(this.textures[b % this.textures.length])
    },b.MovieClip.prototype.gotoAndPlay = function (a) {
        this.currentFrame = a, this.playing = !0
    },b.MovieClip.prototype.updateTransform = function () {
        if (b.Sprite.prototype.updateTransform.call(this), this.playing) {
            this.currentFrame += this.animationSpeed;
            var a = this.currentFrame + .5 | 0;
            this.currentFrame = this.currentFrame % this.textures.length, this.loop || a < this.textures.length ? this.setTexture(this.textures[a % this.textures.length]) : a >= this.textures.length && (this.gotoAndStop(this.textures.length - 1), this.onComplete && this.onComplete())
        }
    },b.MovieClip.fromFrames = function (a) {
        for (var c = [], d = 0; d < a.length; d++)c.push(new b.Texture.fromFrame(a[d]));
        return new b.MovieClip(c)
    },b.MovieClip.fromImages = function (a) {
        for (var c = [], d = 0; d < a.length; d++)c.push(new b.Texture.fromImage(a[d]));
        return new b.MovieClip(c)
    },b.FilterBlock = function () {
        this.visible = !0, this.renderable = !0
    },b.Text = function (a, c) {
        this.canvas = document.createElement("canvas"), this.context = this.canvas.getContext("2d"), b.Sprite.call(this, b.Texture.fromCanvas(this.canvas)), this.setText(a), this.setStyle(c)
    },b.Text.prototype = Object.create(b.Sprite.prototype),b.Text.prototype.constructor = b.Text,Object.defineProperty(b.Text.prototype, "width", {
        get: function () {
            return this.dirty && (this.updateText(), this.dirty = !1), this.scale.x * this.texture.frame.width
        }, set: function (a) {
            this.scale.x = a / this.texture.frame.width, this._width = a
        }
    }),Object.defineProperty(b.Text.prototype, "height", {
        get: function () {
            return this.dirty && (this.updateText(), this.dirty = !1), this.scale.y * this.texture.frame.height
        }, set: function (a) {
            this.scale.y = a / this.texture.frame.height, this._height = a
        }
    }),b.Text.prototype.setStyle = function (a) {
        a = a || {}, a.font = a.font || "bold 20pt Arial", a.fill = a.fill || "black", a.align = a.align || "left", a.stroke = a.stroke || "black", a.strokeThickness = a.strokeThickness || 0, a.wordWrap = a.wordWrap || !1, a.wordWrapWidth = a.wordWrapWidth || 100, a.wordWrapWidth = a.wordWrapWidth || 100, a.dropShadow = a.dropShadow || !1, a.dropShadowAngle = a.dropShadowAngle || Math.PI / 6, a.dropShadowDistance = a.dropShadowDistance || 4, a.dropShadowColor = a.dropShadowColor || "black", this.style = a, this.dirty = !0
    },b.Text.prototype.setText = function (a) {
        this.text = a.toString() || " ", this.dirty = !0
    },b.Text.prototype.updateText = function () {
        this.context.font = this.style.font;
        var a = this.text;
        this.style.wordWrap && (a = this.wordWrap(this.text));
        for (var b = a.split(/(?:\r\n|\r|\n)/), c = [], d = 0, e = 0; e < b.length; e++) {
            var f = this.context.measureText(b[e]).width;
            c[e] = f, d = Math.max(d, f)
        }
        var g = d + this.style.strokeThickness;
        this.style.dropShadow && (g += this.style.dropShadowDistance), this.canvas.width = g + this.context.lineWidth;
        var h = this.determineFontHeight("font: " + this.style.font + ";") + this.style.strokeThickness, i = h * b.length;
        this.style.dropShadow && (i += this.style.dropShadowDistance), this.canvas.height = i, navigator.isCocoonJS && this.context.clearRect(0, 0, this.canvas.width, this.canvas.height), this.context.font = this.style.font, this.context.strokeStyle = this.style.stroke, this.context.lineWidth = this.style.strokeThickness, this.context.textBaseline = "top";
        var j, k;
        if (this.style.dropShadow) {
            this.context.fillStyle = this.style.dropShadowColor;
            var l = Math.sin(this.style.dropShadowAngle) * this.style.dropShadowDistance, m = Math.cos(this.style.dropShadowAngle) * this.style.dropShadowDistance;
            for (e = 0; e < b.length; e++)j = this.style.strokeThickness / 2, k = this.style.strokeThickness / 2 + e * h, "right" === this.style.align ? j += d - c[e] : "center" === this.style.align && (j += (d - c[e]) / 2), this.style.fill && this.context.fillText(b[e], j + l, k + m)
        }
        for (this.context.fillStyle = this.style.fill, e = 0; e < b.length; e++)j = this.style.strokeThickness / 2, k = this.style.strokeThickness / 2 + e * h, "right" === this.style.align ? j += d - c[e] : "center" === this.style.align && (j += (d - c[e]) / 2), this.style.stroke && this.style.strokeThickness && this.context.strokeText(b[e], j, k), this.style.fill && this.context.fillText(b[e], j, k);
        this.updateTexture()
    },b.Text.prototype.updateTexture = function () {
        this.texture.baseTexture.width = this.canvas.width, this.texture.baseTexture.height = this.canvas.height, this.texture.crop.width = this.texture.frame.width = this.canvas.width, this.texture.crop.height = this.texture.frame.height = this.canvas.height, this._width = this.canvas.width, this._height = this.canvas.height, this.requiresUpdate = !0
    },b.Text.prototype._renderWebGL = function (a) {
        this.requiresUpdate && (this.requiresUpdate = !1, b.updateWebGLTexture(this.texture.baseTexture, a.gl)), b.Sprite.prototype._renderWebGL.call(this, a)
    },b.Text.prototype.updateTransform = function () {
        this.dirty && (this.updateText(), this.dirty = !1), b.Sprite.prototype.updateTransform.call(this)
    },b.Text.prototype.determineFontHeight = function (a) {
        var c = b.Text.heightCache[a];
        if (!c) {
            var d = document.getElementsByTagName("body")[0], e = document.createElement("div"), f = document.createTextNode("M");
            e.appendChild(f), e.setAttribute("style", a + ";position:absolute;top:0;left:0"), d.appendChild(e), c = e.offsetHeight, b.Text.heightCache[a] = c, d.removeChild(e)
        }
        return c
    },b.Text.prototype.wordWrap = function (a) {
        for (var b = "", c = a.split("\n"), d = 0; d < c.length; d++) {
            for (var e = this.style.wordWrapWidth, f = c[d].split(" "), g = 0; g < f.length; g++) {
                var h = this.context.measureText(f[g]).width, i = h + this.context.measureText(" ").width;
                0 === g || i > e ? (g > 0 && (b += "\n"), b += f[g], e = this.style.wordWrapWidth - h) : (e -= i, b += " " + f[g])
            }
            d < c.length - 1 && (b += "\n")
        }
        return b
    },b.Text.prototype.destroy = function (a) {
        this.context = null, this.canvas = null, this.texture.destroy(void 0 === a ? !0 : a)
    },b.Text.heightCache = {},b.BitmapText = function (a, c) {
        b.DisplayObjectContainer.call(this), this._pool = [], this.setText(a), this.setStyle(c), this.updateText(), this.dirty = !1
    },b.BitmapText.prototype = Object.create(b.DisplayObjectContainer.prototype),b.BitmapText.prototype.constructor = b.BitmapText,b.BitmapText.prototype.setText = function (a) {
        this.text = a || " ", this.dirty = !0
    },b.BitmapText.prototype.setStyle = function (a) {
        a = a || {}, a.align = a.align || "left", this.style = a;
        var c = a.font.split(" ");
        this.fontName = c[c.length - 1], this.fontSize = c.length >= 2 ? parseInt(c[c.length - 2], 10) : b.BitmapText.fonts[this.fontName].size, this.dirty = !0, this.tint = a.tint
    },b.BitmapText.prototype.updateText = function () {
        for (var a = b.BitmapText.fonts[this.fontName], c = new b.Point, d = null, e = [], f = 0, g = [], h = 0, i = this.fontSize / a.size, j = 0; j < this.text.length; j++) {
            var k = this.text.charCodeAt(j);
            if (/(?:\r\n|\r|\n)/.test(this.text.charAt(j)))g.push(c.x), f = Math.max(f, c.x), h++, c.x = 0, c.y += a.lineHeight, d = null; else {
                var l = a.chars[k];
                l && (d && l[d] && (c.x += l.kerning[d]), e.push({
                    texture: l.texture,
                    line: h,
                    charCode: k,
                    position: new b.Point(c.x + l.xOffset, c.y + l.yOffset)
                }), c.x += l.xAdvance, d = k)
            }
        }
        g.push(c.x), f = Math.max(f, c.x);
        var m = [];
        for (j = 0; h >= j; j++) {
            var n = 0;
            "right" === this.style.align ? n = f - g[j] : "center" === this.style.align && (n = (f - g[j]) / 2), m.push(n)
        }
        var o = this.children.length, p = e.length, q = this.tint || 16777215;
        for (j = 0; p > j; j++) {
            var r = o > j ? this.children[j] : this._pool.pop();
            r ? r.setTexture(e[j].texture) : r = new b.Sprite(e[j].texture), r.position.x = (e[j].position.x + m[e[j].line]) * i, r.position.y = e[j].position.y * i, r.scale.x = r.scale.y = i, r.tint = q, r.parent || this.addChild(r)
        }
        for (; this.children.length > p;) {
            var s = this.getChildAt(this.children.length - 1);
            this._pool.push(s), this.removeChild(s)
        }
        this.textWidth = f * i, this.textHeight = (c.y + a.lineHeight) * i
    },b.BitmapText.prototype.updateTransform = function () {
        this.dirty && (this.updateText(), this.dirty = !1), b.DisplayObjectContainer.prototype.updateTransform.call(this)
    },b.BitmapText.fonts = {},b.InteractionData = function () {
        this.global = new b.Point, this.target = null, this.originalEvent = null
    },b.InteractionData.prototype.getLocalPosition = function (a) {
        var c = a.worldTransform, d = this.global, e = c.a, f = c.b, g = c.tx, h = c.c, i = c.d, j = c.ty, k = 1 / (e * i + f * -h);
        return new b.Point(i * k * d.x + -f * k * d.y + (j * f - g * i) * k, e * k * d.y + -h * k * d.x + (-j * e + g * h) * k)
    },b.InteractionData.prototype.constructor = b.InteractionData,b.InteractionManager = function (a) {
        this.stage = a, this.mouse = new b.InteractionData, this.touchs = {}, this.tempPoint = new b.Point, this.mouseoverEnabled = !0, this.pool = [], this.interactiveItems = [], this.interactionDOMElement = null, this.onMouseMove = this.onMouseMove.bind(this), this.onMouseDown = this.onMouseDown.bind(this), this.onMouseOut = this.onMouseOut.bind(this), this.onMouseUp = this.onMouseUp.bind(this), this.onTouchStart = this.onTouchStart.bind(this), this.onTouchEnd = this.onTouchEnd.bind(this), this.onTouchMove = this.onTouchMove.bind(this), this.last = 0, this.currentCursorStyle = "inherit", this.mouseOut = !1
    },b.InteractionManager.prototype.constructor = b.InteractionManager,b.InteractionManager.prototype.collectInteractiveSprite = function (a, b) {
        for (var c = a.children, d = c.length, e = d - 1; e >= 0; e--) {
            var f = c[e];
            f._interactive ? (b.interactiveChildren = !0, this.interactiveItems.push(f), f.children.length > 0 && this.collectInteractiveSprite(f, f)) : (f.__iParent = null, f.children.length > 0 && this.collectInteractiveSprite(f, b))
        }
    },b.InteractionManager.prototype.setTarget = function (a) {
        this.target = a, null === this.interactionDOMElement && this.setTargetDomElement(a.view)
    },b.InteractionManager.prototype.setTargetDomElement = function (a) {
        this.removeEvents(), window.navigator.msPointerEnabled && (a.style["-ms-content-zooming"] = "none", a.style["-ms-touch-action"] = "none"), this.interactionDOMElement = a, a.addEventListener("mousemove", this.onMouseMove, !0), a.addEventListener("mousedown", this.onMouseDown, !0), a.addEventListener("mouseout", this.onMouseOut, !0), a.addEventListener("touchstart", this.onTouchStart, !0), a.addEventListener("touchend", this.onTouchEnd, !0), a.addEventListener("touchmove", this.onTouchMove, !0), window.addEventListener("mouseup", this.onMouseUp, !0)
    },b.InteractionManager.prototype.removeEvents = function () {
        this.interactionDOMElement && (this.interactionDOMElement.style["-ms-content-zooming"] = "", this.interactionDOMElement.style["-ms-touch-action"] = "", this.interactionDOMElement.removeEventListener("mousemove", this.onMouseMove, !0), this.interactionDOMElement.removeEventListener("mousedown", this.onMouseDown, !0), this.interactionDOMElement.removeEventListener("mouseout", this.onMouseOut, !0), this.interactionDOMElement.removeEventListener("touchstart", this.onTouchStart, !0), this.interactionDOMElement.removeEventListener("touchend", this.onTouchEnd, !0), this.interactionDOMElement.removeEventListener("touchmove", this.onTouchMove, !0), this.interactionDOMElement = null, window.removeEventListener("mouseup", this.onMouseUp, !0))
    },b.InteractionManager.prototype.update = function () {
        if (this.target) {
            var a = Date.now(), c = a - this.last;
            if (c = c * b.INTERACTION_FREQUENCY / 1e3, !(1 > c)) {
                this.last = a;
                var d = 0;
                this.dirty && this.rebuildInteractiveGraph();
                var e = this.interactiveItems.length, f = "inherit", g = !1;
                for (d = 0; e > d; d++) {
                    var h = this.interactiveItems[d];
                    h.__hit = this.hitTest(h, this.mouse), this.mouse.target = h, h.__hit && !g ? (h.buttonMode && (f = h.defaultCursor), h.interactiveChildren || (g = !0), h.__isOver || (h.mouseover && h.mouseover(this.mouse), h.__isOver = !0)) : h.__isOver && (h.mouseout && h.mouseout(this.mouse), h.__isOver = !1)
                }
                this.currentCursorStyle !== f && (this.currentCursorStyle = f, this.interactionDOMElement.style.cursor = f)
            }
        }
    },b.InteractionManager.prototype.rebuildInteractiveGraph = function () {
        this.dirty = !1;
        for (var a = this.interactiveItems.length, b = 0; a > b; b++)this.interactiveItems[b].interactiveChildren = !1;
        this.interactiveItems = [], this.stage.interactive && this.interactiveItems.push(this.stage), this.collectInteractiveSprite(this.stage, this.stage)
    },b.InteractionManager.prototype.onMouseMove = function (a) {
        this.dirty && this.rebuildInteractiveGraph(), this.mouse.originalEvent = a || window.event;
        var b = this.interactionDOMElement.getBoundingClientRect();
        this.mouse.global.x = (a.clientX - b.left) * (this.target.width / b.width), this.mouse.global.y = (a.clientY - b.top) * (this.target.height / b.height);
        for (var c = this.interactiveItems.length, d = 0; c > d; d++) {
            var e = this.interactiveItems[d];
            e.mousemove && e.mousemove(this.mouse)
        }
    },b.InteractionManager.prototype.onMouseDown = function (a) {
        this.dirty && this.rebuildInteractiveGraph(), this.mouse.originalEvent = a || window.event, b.AUTO_PREVENT_DEFAULT && this.mouse.originalEvent.preventDefault();
        for (var c = this.interactiveItems.length, d = 0; c > d; d++) {
            var e = this.interactiveItems[d];
            if ((e.mousedown || e.click) && (e.__mouseIsDown = !0, e.__hit = this.hitTest(e, this.mouse), e.__hit && (e.mousedown && e.mousedown(this.mouse), e.__isDown = !0, !e.interactiveChildren)))break
        }
    },b.InteractionManager.prototype.onMouseOut = function () {
        this.dirty && this.rebuildInteractiveGraph();
        var a = this.interactiveItems.length;
        this.interactionDOMElement.style.cursor = "inherit";
        for (var b = 0; a > b; b++) {
            var c = this.interactiveItems[b];
            c.__isOver && (this.mouse.target = c, c.mouseout && c.mouseout(this.mouse), c.__isOver = !1)
        }
        this.mouseOut = !0, this.mouse.global.x = -1e4, this.mouse.global.y = -1e4
    },b.InteractionManager.prototype.onMouseUp = function (a) {
        this.dirty && this.rebuildInteractiveGraph(), this.mouse.originalEvent = a || window.event;
        for (var b = this.interactiveItems.length, c = !1, d = 0; b > d; d++) {
            var e = this.interactiveItems[d];
            e.__hit = this.hitTest(e, this.mouse), e.__hit && !c ? (e.mouseup && e.mouseup(this.mouse), e.__isDown && e.click && e.click(this.mouse), e.interactiveChildren || (c = !0)) : e.__isDown && e.mouseupoutside && e.mouseupoutside(this.mouse), e.__isDown = !1
        }
    },b.InteractionManager.prototype.hitTest = function (a, c) {
        var d = c.global;
        if (!a.worldVisible)return !1;
        var e = a instanceof b.Sprite, f = a.worldTransform, g = f.a, h = f.b, i = f.tx, j = f.c, k = f.d, l = f.ty, m = 1 / (g * k + h * -j), n = k * m * d.x + -h * m * d.y + (l * h - i * k) * m, o = g * m * d.y + -j * m * d.x + (-l * g + i * j) * m;
        if (c.target = a, a.hitArea && a.hitArea.contains)return a.hitArea.contains(n, o) ? (c.target = a, !0) : !1;
        if (e) {
            var p, q = a.texture.frame.width, r = a.texture.frame.height, s = -q * a.anchor.x;
            if (n > s && s + q > n && (p = -r * a.anchor.y, o > p && p + r > o))return c.target = a, !0
        }
        for (var t = a.children.length, u = 0; t > u; u++) {
            var v = a.children[u], w = this.hitTest(v, c);
            if (w)return c.target = a, !0
        }
        return !1
    },b.InteractionManager.prototype.onTouchMove = function (a) {
        this.dirty && this.rebuildInteractiveGraph();
        var b, c = this.interactionDOMElement.getBoundingClientRect(), d = a.changedTouches, e = 0;
        for (e = 0; e < d.length; e++) {
            var f = d[e];
            b = this.touchs[f.identifier], b.originalEvent = a || window.event, b.global.x = (f.clientX - c.left) * (this.target.width / c.width), b.global.y = (f.clientY - c.top) * (this.target.height / c.height), navigator.isCocoonJS && (b.global.x = f.clientX, b.global.y = f.clientY);
            for (var g = 0; g < this.interactiveItems.length; g++) {
                var h = this.interactiveItems[g];
                h.touchmove && h.__touchData && h.__touchData[f.identifier] && h.touchmove(b)
            }
        }
    },b.InteractionManager.prototype.onTouchStart = function (a) {
        this.dirty && this.rebuildInteractiveGraph();
        var c = this.interactionDOMElement.getBoundingClientRect();
        b.AUTO_PREVENT_DEFAULT && a.preventDefault();
        for (var d = a.changedTouches, e = 0; e < d.length; e++) {
            var f = d[e], g = this.pool.pop();
            g || (g = new b.InteractionData), g.originalEvent = a || window.event, this.touchs[f.identifier] = g, g.global.x = (f.clientX - c.left) * (this.target.width / c.width), g.global.y = (f.clientY - c.top) * (this.target.height / c.height), navigator.isCocoonJS && (g.global.x = f.clientX, g.global.y = f.clientY);
            for (var h = this.interactiveItems.length, i = 0; h > i; i++) {
                var j = this.interactiveItems[i];
                if ((j.touchstart || j.tap) && (j.__hit = this.hitTest(j, g), j.__hit && (j.touchstart && j.touchstart(g), j.__isDown = !0, j.__touchData = j.__touchData || {}, j.__touchData[f.identifier] = g, !j.interactiveChildren)))break
            }
        }
    },b.InteractionManager.prototype.onTouchEnd = function (a) {
        this.dirty && this.rebuildInteractiveGraph();
        for (var b = this.interactionDOMElement.getBoundingClientRect(), c = a.changedTouches, d = 0; d < c.length; d++) {
            var e = c[d], f = this.touchs[e.identifier], g = !1;
            f.global.x = (e.clientX - b.left) * (this.target.width / b.width), f.global.y = (e.clientY - b.top) * (this.target.height / b.height), navigator.isCocoonJS && (f.global.x = e.clientX, f.global.y = e.clientY);
            for (var h = this.interactiveItems.length, i = 0; h > i; i++) {
                var j = this.interactiveItems[i];
                j.__touchData && j.__touchData[e.identifier] && (j.__hit = this.hitTest(j, j.__touchData[e.identifier]), f.originalEvent = a || window.event, (j.touchend || j.tap) && (j.__hit && !g ? (j.touchend && j.touchend(f), j.__isDown && j.tap && j.tap(f), j.interactiveChildren || (g = !0)) : j.__isDown && j.touchendoutside && j.touchendoutside(f), j.__isDown = !1), j.__touchData[e.identifier] = null)
            }
            this.pool.push(f), this.touchs[e.identifier] = null
        }
    },b.Stage = function (a) {
        b.DisplayObjectContainer.call(this), this.worldTransform = new b.Matrix, this.interactive = !0, this.interactionManager = new b.InteractionManager(this), this.dirty = !0, this.stage = this, this.stage.hitArea = new b.Rectangle(0, 0, 1e5, 1e5), this.setBackgroundColor(a)
    },b.Stage.prototype = Object.create(b.DisplayObjectContainer.prototype),b.Stage.prototype.constructor = b.Stage,b.Stage.prototype.setInteractionDelegate = function (a) {
        this.interactionManager.setTargetDomElement(a)
    },b.Stage.prototype.updateTransform = function () {
        this.worldAlpha = 1;
        for (var a = 0, b = this.children.length; b > a; a++)this.children[a].updateTransform();
        this.dirty && (this.dirty = !1, this.interactionManager.dirty = !0), this.interactive && this.interactionManager.update()
    },b.Stage.prototype.setBackgroundColor = function (a) {
        this.backgroundColor = a || 0, this.backgroundColorSplit = b.hex2rgb(this.backgroundColor);
        var c = this.backgroundColor.toString(16);
        c = "000000".substr(0, 6 - c.length) + c, this.backgroundColorString = "#" + c
    },b.Stage.prototype.getMousePosition = function () {
        return this.interactionManager.mouse.global
    };
    for (var c = 0, d = ["ms", "moz", "webkit", "o"], e = 0; e < d.length && !window.requestAnimationFrame; ++e)window.requestAnimationFrame = window[d[e] + "RequestAnimationFrame"], window.cancelAnimationFrame = window[d[e] + "CancelAnimationFrame"] || window[d[e] + "CancelRequestAnimationFrame"];
    window.requestAnimationFrame || (window.requestAnimationFrame = function (a) {
        var b = (new Date).getTime(), d = Math.max(0, 16 - (b - c)), e = window.setTimeout(function () {
            a(b + d)
        }, d);
        return c = b + d, e
    }), window.cancelAnimationFrame || (window.cancelAnimationFrame = function (a) {
        clearTimeout(a)
    }), window.requestAnimFrame = window.requestAnimationFrame, b.hex2rgb = function (a) {
        return [(a >> 16 & 255) / 255, (a >> 8 & 255) / 255, (255 & a) / 255]
    }, b.rgb2hex = function (a) {
        return (255 * a[0] << 16) + (255 * a[1] << 8) + 255 * a[2]
    }, "function" != typeof Function.prototype.bind && (Function.prototype.bind = function () {
        var a = Array.prototype.slice;
        return function (b) {
            function c() {
                var f = e.concat(a.call(arguments));
                d.apply(this instanceof c ? this : b, f)
            }

            var d = this, e = a.call(arguments, 1);
            if ("function" != typeof d)throw new TypeError;
            return c.prototype = function f(a) {
                return a && (f.prototype = a), this instanceof f ? void 0 : new f
            }(d.prototype), c
        }
    }()), b.AjaxRequest = function () {
        var a = ["Msxml2.XMLHTTP.6.0", "Msxml2.XMLHTTP.3.0", "Microsoft.XMLHTTP"];
        if (!window.ActiveXObject)return window.XMLHttpRequest ? new window.XMLHttpRequest : !1;
        for (var b = 0; b < a.length; b++)try {
            return new window.ActiveXObject(a[b])
        } catch (c) {
        }
    }, b.canUseNewCanvasBlendModes = function () {
        var a = document.createElement("canvas");
        a.width = 1, a.height = 1;
        var b = a.getContext("2d");
        return b.fillStyle = "#000", b.fillRect(0, 0, 1, 1), b.globalCompositeOperation = "multiply", b.fillStyle = "#fff", b.fillRect(0, 0, 1, 1), 0 === b.getImageData(0, 0, 1, 1).data[0]
    }, b.getNextPowerOfTwo = function (a) {
        if (a > 0 && 0 === (a & a - 1))return a;
        for (var b = 1; a > b;)b <<= 1;
        return b
    }, b.EventTarget = function () {
        var a = {};
        this.addEventListener = this.on = function (b, c) {
            void 0 === a[b] && (a[b] = []), -1 === a[b].indexOf(c) && a[b].unshift(c)
        }, this.dispatchEvent = this.emit = function (b) {
            if (a[b.type] && a[b.type].length)for (var c = a[b.type].length - 1; c >= 0; c--)a[b.type][c](b)
        }, this.removeEventListener = this.off = function (b, c) {
            if (void 0 !== a[b]) {
                var d = a[b].indexOf(c);
                -1 !== d && a[b].splice(d, 1)
            }
        }, this.removeAllEventListeners = function (b) {
            var c = a[b];
            c && (c.length = 0)
        }
    }, b.autoDetectRenderer = function (a, c, d, e, f) {
        a || (a = 800), c || (c = 600);
        var g = function () {
            try {
                var a = document.createElement("canvas");
                return !!window.WebGLRenderingContext && (a.getContext("webgl") || a.getContext("experimental-webgl"))
            } catch (b) {
                return !1
            }
        }();
        return g ? new b.WebGLRenderer(a, c, d, e, f) : new b.CanvasRenderer(a, c, d, e)
    }, b.autoDetectRecommendedRenderer = function (a, c, d, e, f) {
        a || (a = 800), c || (c = 600);
        var g = function () {
            try {
                var a = document.createElement("canvas");
                return !!window.WebGLRenderingContext && (a.getContext("webgl") || a.getContext("experimental-webgl"))
            } catch (b) {
                return !1
            }
        }(), h = /Android/i.test(navigator.userAgent);
        return g && !h ? new b.WebGLRenderer(a, c, d, e, f) : new b.CanvasRenderer(a, c, d, e)
    }, b.PolyK = {}, b.PolyK.Triangulate = function (a) {
        var c = !0, d = a.length >> 1;
        if (3 > d)return [];
        for (var e = [], f = [], g = 0; d > g; g++)f.push(g);
        g = 0;
        for (var h = d; h > 3;) {
            var i = f[(g + 0) % h], j = f[(g + 1) % h], k = f[(g + 2) % h], l = a[2 * i], m = a[2 * i + 1], n = a[2 * j], o = a[2 * j + 1], p = a[2 * k], q = a[2 * k + 1], r = !1;
            if (b.PolyK._convex(l, m, n, o, p, q, c)) {
                r = !0;
                for (var s = 0; h > s; s++) {
                    var t = f[s];
                    if (t !== i && t !== j && t !== k && b.PolyK._PointInTriangle(a[2 * t], a[2 * t + 1], l, m, n, o, p, q)) {
                        r = !1;
                        break
                    }
                }
            }
            if (r)e.push(i, j, k), f.splice((g + 1) % h, 1), h--, g = 0; else if (g++ > 3 * h) {
                if (!c)return window.console.log("PIXI Warning: shape too complex to fill"), [];
                for (e = [], f = [], g = 0; d > g; g++)f.push(g);
                g = 0, h = d, c = !1
            }
        }
        return e.push(f[0], f[1], f[2]), e
    }, b.PolyK._PointInTriangle = function (a, b, c, d, e, f, g, h) {
        var i = g - c, j = h - d, k = e - c, l = f - d, m = a - c, n = b - d, o = i * i + j * j, p = i * k + j * l, q = i * m + j * n, r = k * k + l * l, s = k * m + l * n, t = 1 / (o * r - p * p), u = (r * q - p * s) * t, v = (o * s - p * q) * t;
        return u >= 0 && v >= 0 && 1 > u + v
    }, b.PolyK._convex = function (a, b, c, d, e, f, g) {
        return (b - d) * (e - c) + (c - a) * (f - d) >= 0 === g
    }, b.initDefaultShaders = function () {
    }, b.CompileVertexShader = function (a, c) {
        return b._CompileShader(a, c, a.VERTEX_SHADER)
    }, b.CompileFragmentShader = function (a, c) {
        return b._CompileShader(a, c, a.FRAGMENT_SHADER)
    }, b._CompileShader = function (a, b, c) {
        var d = b.join("\n"), e = a.createShader(c);
        return a.shaderSource(e, d), a.compileShader(e), a.getShaderParameter(e, a.COMPILE_STATUS) ? e : (window.console.log(a.getShaderInfoLog(e)), null)
    }, b.compileProgram = function (a, c, d) {
        var e = b.CompileFragmentShader(a, d), f = b.CompileVertexShader(a, c), g = a.createProgram();
        return a.attachShader(g, f), a.attachShader(g, e), a.linkProgram(g), a.getProgramParameter(g, a.LINK_STATUS) || window.console.log("Could not initialise shaders"), g
    }, b.PixiShader = function (a) {
        this._UID = b._UID++, this.gl = a, this.program = null, this.fragmentSrc = ["precision lowp float;", "varying vec2 vTextureCoord;", "varying vec4 vColor;", "uniform sampler2D uSampler;", "void main(void) {", "   gl_FragColor = texture2D(uSampler, vTextureCoord) * vColor ;", "}"], this.textureCount = 0, this.attributes = [], this.init()
    }, b.PixiShader.prototype.init = function () {
        var a = this.gl, c = b.compileProgram(a, this.vertexSrc || b.PixiShader.defaultVertexSrc, this.fragmentSrc);
        a.useProgram(c), this.uSampler = a.getUniformLocation(c, "uSampler"), this.projectionVector = a.getUniformLocation(c, "projectionVector"), this.offsetVector = a.getUniformLocation(c, "offsetVector"), this.dimensions = a.getUniformLocation(c, "dimensions"), this.aVertexPosition = a.getAttribLocation(c, "aVertexPosition"), this.aTextureCoord = a.getAttribLocation(c, "aTextureCoord"), this.colorAttribute = a.getAttribLocation(c, "aColor"), -1 === this.colorAttribute && (this.colorAttribute = 2), this.attributes = [this.aVertexPosition, this.aTextureCoord, this.colorAttribute];
        for (var d in this.uniforms)this.uniforms[d].uniformLocation = a.getUniformLocation(c, d);
        this.initUniforms(), this.program = c
    }, b.PixiShader.prototype.initUniforms = function () {
        this.textureCount = 1;
        var a, b = this.gl;
        for (var c in this.uniforms) {
            a = this.uniforms[c];
            var d = a.type;
            "sampler2D" === d ? (a._init = !1, null !== a.value && this.initSampler2D(a)) : "mat2" === d || "mat3" === d || "mat4" === d ? (a.glMatrix = !0, a.glValueLength = 1, "mat2" === d ? a.glFunc = b.uniformMatrix2fv : "mat3" === d ? a.glFunc = b.uniformMatrix3fv : "mat4" === d && (a.glFunc = b.uniformMatrix4fv)) : (a.glFunc = b["uniform" + d], a.glValueLength = "2f" === d || "2i" === d ? 2 : "3f" === d || "3i" === d ? 3 : "4f" === d || "4i" === d ? 4 : 1)
        }
    }, b.PixiShader.prototype.initSampler2D = function (a) {
        if (a.value && a.value.baseTexture && a.value.baseTexture.hasLoaded) {
            var b = this.gl;
            if (b.activeTexture(b["TEXTURE" + this.textureCount]), b.bindTexture(b.TEXTURE_2D, a.value.baseTexture._glTextures[b.id]), a.textureData) {
                var c = a.textureData, d = c.magFilter ? c.magFilter : b.LINEAR, e = c.minFilter ? c.minFilter : b.LINEAR, f = c.wrapS ? c.wrapS : b.CLAMP_TO_EDGE, g = c.wrapT ? c.wrapT : b.CLAMP_TO_EDGE, h = c.luminance ? b.LUMINANCE : b.RGBA;
                if (c.repeat && (f = b.REPEAT, g = b.REPEAT), b.pixelStorei(b.UNPACK_FLIP_Y_WEBGL, !!c.flipY), c.width) {
                    var i = c.width ? c.width : 512, j = c.height ? c.height : 2, k = c.border ? c.border : 0;
                    b.texImage2D(b.TEXTURE_2D, 0, h, i, j, k, h, b.UNSIGNED_BYTE, null)
                } else b.texImage2D(b.TEXTURE_2D, 0, h, b.RGBA, b.UNSIGNED_BYTE, a.value.baseTexture.source);
                b.texParameteri(b.TEXTURE_2D, b.TEXTURE_MAG_FILTER, d), b.texParameteri(b.TEXTURE_2D, b.TEXTURE_MIN_FILTER, e), b.texParameteri(b.TEXTURE_2D, b.TEXTURE_WRAP_S, f), b.texParameteri(b.TEXTURE_2D, b.TEXTURE_WRAP_T, g)
            }
            b.uniform1i(a.uniformLocation, this.textureCount), a._init = !0, this.textureCount++
        }
    }, b.PixiShader.prototype.syncUniforms = function () {
        this.textureCount = 1;
        var a, c = this.gl;
        for (var d in this.uniforms)a = this.uniforms[d], 1 === a.glValueLength ? a.glMatrix === !0 ? a.glFunc.call(c, a.uniformLocation, a.transpose, a.value) : a.glFunc.call(c, a.uniformLocation, a.value) : 2 === a.glValueLength ? a.glFunc.call(c, a.uniformLocation, a.value.x, a.value.y) : 3 === a.glValueLength ? a.glFunc.call(c, a.uniformLocation, a.value.x, a.value.y, a.value.z) : 4 === a.glValueLength ? a.glFunc.call(c, a.uniformLocation, a.value.x, a.value.y, a.value.z, a.value.w) : "sampler2D" === a.type && (a._init ? (c.activeTexture(c["TEXTURE" + this.textureCount]), c.bindTexture(c.TEXTURE_2D, a.value.baseTexture._glTextures[c.id] || b.createWebGLTexture(a.value.baseTexture, c)), c.uniform1i(a.uniformLocation, this.textureCount), this.textureCount++) : this.initSampler2D(a))
    }, b.PixiShader.prototype.destroy = function () {
        this.gl.deleteProgram(this.program), this.uniforms = null, this.gl = null, this.attributes = null
    }, b.PixiShader.defaultVertexSrc = ["attribute vec2 aVertexPosition;", "attribute vec2 aTextureCoord;", "attribute vec2 aColor;", "uniform vec2 projectionVector;", "uniform vec2 offsetVector;", "varying vec2 vTextureCoord;", "varying vec4 vColor;", "const vec2 center = vec2(-1.0, 1.0);", "void main(void) {", "   gl_Position = vec4( ((aVertexPosition + offsetVector) / projectionVector) + center , 0.0, 1.0);", "   vTextureCoord = aTextureCoord;", "   vec3 color = mod(vec3(aColor.y/65536.0, aColor.y/256.0, aColor.y), 256.0) / 256.0;", "   vColor = vec4(color * aColor.x, aColor.x);", "}"], b.PixiFastShader = function (a) {
        this._UID = b._UID++, this.gl = a, this.program = null, this.fragmentSrc = ["precision lowp float;", "varying vec2 vTextureCoord;", "varying float vColor;", "uniform sampler2D uSampler;", "void main(void) {", "   gl_FragColor = texture2D(uSampler, vTextureCoord) * vColor ;", "}"], this.vertexSrc = ["attribute vec2 aVertexPosition;", "attribute vec2 aPositionCoord;", "attribute vec2 aScale;", "attribute float aRotation;", "attribute vec2 aTextureCoord;", "attribute float aColor;", "uniform vec2 projectionVector;", "uniform vec2 offsetVector;", "uniform mat3 uMatrix;", "varying vec2 vTextureCoord;", "varying float vColor;", "const vec2 center = vec2(-1.0, 1.0);", "void main(void) {", "   vec2 v;", "   vec2 sv = aVertexPosition * aScale;", "   v.x = (sv.x) * cos(aRotation) - (sv.y) * sin(aRotation);", "   v.y = (sv.x) * sin(aRotation) + (sv.y) * cos(aRotation);", "   v = ( uMatrix * vec3(v + aPositionCoord , 1.0) ).xy ;", "   gl_Position = vec4( ( v / projectionVector) + center , 0.0, 1.0);", "   vTextureCoord = aTextureCoord;", "   vColor = aColor;", "}"], this.textureCount = 0, this.init()
    }, b.PixiFastShader.prototype.init = function () {
        var a = this.gl, c = b.compileProgram(a, this.vertexSrc, this.fragmentSrc);
        a.useProgram(c), this.uSampler = a.getUniformLocation(c, "uSampler"), this.projectionVector = a.getUniformLocation(c, "projectionVector"), this.offsetVector = a.getUniformLocation(c, "offsetVector"), this.dimensions = a.getUniformLocation(c, "dimensions"), this.uMatrix = a.getUniformLocation(c, "uMatrix"), this.aVertexPosition = a.getAttribLocation(c, "aVertexPosition"), this.aPositionCoord = a.getAttribLocation(c, "aPositionCoord"), this.aScale = a.getAttribLocation(c, "aScale"), this.aRotation = a.getAttribLocation(c, "aRotation"), this.aTextureCoord = a.getAttribLocation(c, "aTextureCoord"), this.colorAttribute = a.getAttribLocation(c, "aColor"), -1 === this.colorAttribute && (this.colorAttribute = 2), this.attributes = [this.aVertexPosition, this.aPositionCoord, this.aScale, this.aRotation, this.aTextureCoord, this.colorAttribute], this.program = c
    }, b.PixiFastShader.prototype.destroy = function () {
        this.gl.deleteProgram(this.program), this.uniforms = null, this.gl = null, this.attributes = null
    }, b.StripShader = function (a) {
        this._UID = b._UID++, this.gl = a, this.program = null, this.fragmentSrc = ["precision mediump float;", "varying vec2 vTextureCoord;", "uniform float alpha;", "uniform sampler2D uSampler;", "void main(void) {", "   gl_FragColor = texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y));", "}"], this.vertexSrc = ["attribute vec2 aVertexPosition;", "attribute vec2 aTextureCoord;", "uniform mat3 translationMatrix;", "uniform vec2 projectionVector;", "uniform vec2 offsetVector;", "varying vec2 vTextureCoord;", "void main(void) {", "   vec3 v = translationMatrix * vec3(aVertexPosition , 1.0);", "   v -= offsetVector.xyx;", "   gl_Position = vec4( v.x / projectionVector.x -1.0, v.y / -projectionVector.y + 1.0 , 0.0, 1.0);", "   vTextureCoord = aTextureCoord;", "}"], this.init()
    }, b.StripShader.prototype.init = function () {
        var a = this.gl, c = b.compileProgram(a, this.vertexSrc, this.fragmentSrc);
        a.useProgram(c), this.uSampler = a.getUniformLocation(c, "uSampler"), this.projectionVector = a.getUniformLocation(c, "projectionVector"), this.offsetVector = a.getUniformLocation(c, "offsetVector"), this.colorAttribute = a.getAttribLocation(c, "aColor"), this.aVertexPosition = a.getAttribLocation(c, "aVertexPosition"), this.aTextureCoord = a.getAttribLocation(c, "aTextureCoord"), this.attributes = [this.aVertexPosition, this.aTextureCoord], this.translationMatrix = a.getUniformLocation(c, "translationMatrix"), this.alpha = a.getUniformLocation(c, "alpha"), this.program = c
    }, b.PrimitiveShader = function (a) {
        this._UID = b._UID++, this.gl = a, this.program = null, this.fragmentSrc = ["precision mediump float;", "varying vec4 vColor;", "void main(void) {", "   gl_FragColor = vColor;", "}"], this.vertexSrc = ["attribute vec2 aVertexPosition;", "attribute vec4 aColor;", "uniform mat3 translationMatrix;", "uniform vec2 projectionVector;", "uniform vec2 offsetVector;", "uniform float alpha;", "uniform vec3 tint;", "varying vec4 vColor;", "void main(void) {", "   vec3 v = translationMatrix * vec3(aVertexPosition , 1.0);", "   v -= offsetVector.xyx;", "   gl_Position = vec4( v.x / projectionVector.x -1.0, v.y / -projectionVector.y + 1.0 , 0.0, 1.0);", "   vColor = aColor * vec4(tint * alpha, alpha);", "}"], this.init()
    }, b.PrimitiveShader.prototype.init = function () {
        var a = this.gl, c = b.compileProgram(a, this.vertexSrc, this.fragmentSrc);
        a.useProgram(c), this.projectionVector = a.getUniformLocation(c, "projectionVector"), this.offsetVector = a.getUniformLocation(c, "offsetVector"), this.tintColor = a.getUniformLocation(c, "tint"), this.aVertexPosition = a.getAttribLocation(c, "aVertexPosition"), this.colorAttribute = a.getAttribLocation(c, "aColor"), this.attributes = [this.aVertexPosition, this.colorAttribute], this.translationMatrix = a.getUniformLocation(c, "translationMatrix"), this.alpha = a.getUniformLocation(c, "alpha"), this.program = c
    }, b.PrimitiveShader.prototype.destroy = function () {
        this.gl.deleteProgram(this.program), this.uniforms = null, this.gl = null, this.attribute = null
    }, b.ComplexPrimitiveShader = function (a) {
        this._UID = b._UID++, this.gl = a, this.program = null, this.fragmentSrc = ["precision mediump float;", "varying vec4 vColor;", "void main(void) {", "   gl_FragColor = vColor;", "}"], this.vertexSrc = ["attribute vec2 aVertexPosition;", "uniform mat3 translationMatrix;", "uniform vec2 projectionVector;", "uniform vec2 offsetVector;", "uniform vec3 tint;", "uniform float alpha;", "uniform vec3 color;", "varying vec4 vColor;", "void main(void) {", "   vec3 v = translationMatrix * vec3(aVertexPosition , 1.0);", "   v -= offsetVector.xyx;", "   gl_Position = vec4( v.x / projectionVector.x -1.0, v.y / -projectionVector.y + 1.0 , 0.0, 1.0);", "   vColor = vec4(color * alpha * tint, alpha);", "}"], this.init()
    }, b.ComplexPrimitiveShader.prototype.init = function () {
        var a = this.gl, c = b.compileProgram(a, this.vertexSrc, this.fragmentSrc);
        a.useProgram(c), this.projectionVector = a.getUniformLocation(c, "projectionVector"), this.offsetVector = a.getUniformLocation(c, "offsetVector"), this.tintColor = a.getUniformLocation(c, "tint"), this.color = a.getUniformLocation(c, "color"), this.aVertexPosition = a.getAttribLocation(c, "aVertexPosition"), this.attributes = [this.aVertexPosition, this.colorAttribute], this.translationMatrix = a.getUniformLocation(c, "translationMatrix"), this.alpha = a.getUniformLocation(c, "alpha"), this.program = c
    }, b.ComplexPrimitiveShader.prototype.destroy = function () {
        this.gl.deleteProgram(this.program), this.uniforms = null, this.gl = null, this.attribute = null
    }, b.WebGLGraphics = function () {
    }, b.WebGLGraphics.renderGraphics = function (a, c) {
        var d, e = c.gl, f = c.projection, g = c.offset, h = c.shaderManager.primitiveShader;
        a.dirty && b.WebGLGraphics.updateGraphics(a, e);
        for (var i = a._webGL[e.id], j = 0; j < i.data.length; j++)1 === i.data[j].mode ? (d = i.data[j], c.stencilManager.pushStencil(a, d, c), e.drawElements(e.TRIANGLE_FAN, 4, e.UNSIGNED_SHORT, 2 * (d.indices.length - 4)), c.stencilManager.popStencil(a, d, c), this.last = d.mode) : (d = i.data[j], c.shaderManager.setShader(h), h = c.shaderManager.primitiveShader, e.uniformMatrix3fv(h.translationMatrix, !1, a.worldTransform.toArray(!0)), e.uniform2f(h.projectionVector, f.x, -f.y), e.uniform2f(h.offsetVector, -g.x, -g.y), e.uniform3fv(h.tintColor, b.hex2rgb(a.tint)), e.uniform1f(h.alpha, a.worldAlpha), e.bindBuffer(e.ARRAY_BUFFER, d.buffer), e.vertexAttribPointer(h.aVertexPosition, 2, e.FLOAT, !1, 24, 0), e.vertexAttribPointer(h.colorAttribute, 4, e.FLOAT, !1, 24, 8), e.bindBuffer(e.ELEMENT_ARRAY_BUFFER, d.indexBuffer), e.drawElements(e.TRIANGLE_STRIP, d.indices.length, e.UNSIGNED_SHORT, 0))
    }, b.WebGLGraphics.updateGraphics = function (a, c) {
        var d = a._webGL[c.id];
        d || (d = a._webGL[c.id] = {lastIndex: 0, data: [], gl: c}), a.dirty = !1;
        var e;
        if (a.clearDirty) {
            for (a.clearDirty = !1, e = 0; e < d.data.length; e++) {
                var f = d.data[e];
                f.reset(), b.WebGLGraphics.graphicsDataPool.push(f)
            }
            d.data = [], d.lastIndex = 0
        }
        var g;
        for (e = d.lastIndex; e < a.graphicsData.length; e++) {
            var h = a.graphicsData[e];
            h.type === b.Graphics.POLY ? (h.fill && h.points.length > 6 && (h.points.length > 10 ? (g = b.WebGLGraphics.switchMode(d, 1), b.WebGLGraphics.buildComplexPoly(h, g)) : (g = b.WebGLGraphics.switchMode(d, 0), b.WebGLGraphics.buildPoly(h, g))), h.lineWidth > 0 && (g = b.WebGLGraphics.switchMode(d, 0), b.WebGLGraphics.buildLine(h, g))) : (g = b.WebGLGraphics.switchMode(d, 0), h.type === b.Graphics.RECT ? b.WebGLGraphics.buildRectangle(h, g) : h.type === b.Graphics.CIRC || h.type === b.Graphics.ELIP ? b.WebGLGraphics.buildCircle(h, g) : h.type === b.Graphics.RREC && b.WebGLGraphics.buildRoundedRectangle(h, g)), d.lastIndex++
        }
        for (e = 0; e < d.data.length; e++)g = d.data[e], g.dirty && g.upload()
    }, b.WebGLGraphics.switchMode = function (a, c) {
        var d;
        return a.data.length ? (d = a.data[a.data.length - 1], (d.mode !== c || 1 === c) && (d = b.WebGLGraphics.graphicsDataPool.pop() || new b.WebGLGraphicsData(a.gl), d.mode = c, a.data.push(d))) : (d = b.WebGLGraphics.graphicsDataPool.pop() || new b.WebGLGraphicsData(a.gl), d.mode = c, a.data.push(d)), d.dirty = !0, d
    }, b.WebGLGraphics.buildRectangle = function (a, c) {
        var d = a.points, e = d[0], f = d[1], g = d[2], h = d[3];
        if (a.fill) {
            var i = b.hex2rgb(a.fillColor), j = a.fillAlpha, k = i[0] * j, l = i[1] * j, m = i[2] * j, n = c.points, o = c.indices, p = n.length / 6;
            n.push(e, f), n.push(k, l, m, j), n.push(e + g, f), n.push(k, l, m, j), n.push(e, f + h), n.push(k, l, m, j), n.push(e + g, f + h), n.push(k, l, m, j), o.push(p, p, p + 1, p + 2, p + 3, p + 3)
        }
        if (a.lineWidth) {
            var q = a.points;
            a.points = [e, f, e + g, f, e + g, f + h, e, f + h, e, f], b.WebGLGraphics.buildLine(a, c), a.points = q
        }
    }, b.WebGLGraphics.buildRoundedRectangle = function (a, c) {
        var d = a.points, e = d[0], f = d[1], g = d[2], h = d[3], i = d[4], j = [];
        if (j.push(e, f + i), j = j.concat(b.WebGLGraphics.quadraticBezierCurve(e, f + h - i, e, f + h, e + i, f + h)), j = j.concat(b.WebGLGraphics.quadraticBezierCurve(e + g - i, f + h, e + g, f + h, e + g, f + h - i)), j = j.concat(b.WebGLGraphics.quadraticBezierCurve(e + g, f + i, e + g, f, e + g - i, f)), j = j.concat(b.WebGLGraphics.quadraticBezierCurve(e + i, f, e, f, e, f + i)), a.fill) {
            var k = b.hex2rgb(a.fillColor), l = a.fillAlpha, m = k[0] * l, n = k[1] * l, o = k[2] * l, p = c.points, q = c.indices, r = p.length / 6, s = b.PolyK.Triangulate(j), t = 0;
            for (t = 0; t < s.length; t += 3)q.push(s[t] + r), q.push(s[t] + r), q.push(s[t + 1] + r), q.push(s[t + 2] + r), q.push(s[t + 2] + r);
            for (t = 0; t < j.length; t++)p.push(j[t], j[++t], m, n, o, l)
        }
        if (a.lineWidth) {
            var u = a.points;
            a.points = j, b.WebGLGraphics.buildLine(a, c), a.points = u
        }
    }, b.WebGLGraphics.quadraticBezierCurve = function (a, b, c, d, e, f) {
        function g(a, b, c) {
            var d = b - a;
            return a + d * c
        }

        for (var h, i, j, k, l, m, n = 20, o = [], p = 0, q = 0; n >= q; q++)p = q / n, h = g(a, c, p), i = g(b, d, p), j = g(c, e, p), k = g(d, f, p), l = g(h, j, p), m = g(i, k, p), o.push(l, m);
        return o
    }, b.WebGLGraphics.buildCircle = function (a, c) {
        var d = a.points, e = d[0], f = d[1], g = d[2], h = d[3], i = 40, j = 2 * Math.PI / i, k = 0;
        if (a.fill) {
            var l = b.hex2rgb(a.fillColor), m = a.fillAlpha, n = l[0] * m, o = l[1] * m, p = l[2] * m, q = c.points, r = c.indices, s = q.length / 6;
            for (r.push(s), k = 0; i + 1 > k; k++)q.push(e, f, n, o, p, m), q.push(e + Math.sin(j * k) * g, f + Math.cos(j * k) * h, n, o, p, m), r.push(s++, s++);
            r.push(s - 1)
        }
        if (a.lineWidth) {
            var t = a.points;
            for (a.points = [], k = 0; i + 1 > k; k++)a.points.push(e + Math.sin(j * k) * g, f + Math.cos(j * k) * h);
            b.WebGLGraphics.buildLine(a, c), a.points = t
        }
    }, b.WebGLGraphics.buildLine = function (a, c) {
        var d = 0, e = a.points;
        if (0 !== e.length) {
            if (a.lineWidth % 2)for (d = 0; d < e.length; d++)e[d] += .5;
            var f = new b.Point(e[0], e[1]), g = new b.Point(e[e.length - 2], e[e.length - 1]);
            if (f.x === g.x && f.y === g.y) {
                e = e.slice(), e.pop(), e.pop(), g = new b.Point(e[e.length - 2], e[e.length - 1]);
                var h = g.x + .5 * (f.x - g.x), i = g.y + .5 * (f.y - g.y);
                e.unshift(h, i), e.push(h, i)
            }
            var j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z, A, B, C, D, E, F, G = c.points, H = c.indices, I = e.length / 2, J = e.length, K = G.length / 6, L = a.lineWidth / 2, M = b.hex2rgb(a.lineColor), N = a.lineAlpha, O = M[0] * N, P = M[1] * N, Q = M[2] * N;
            for (l = e[0], m = e[1], n = e[2], o = e[3], r = -(m - o), s = l - n, F = Math.sqrt(r * r + s * s), r /= F, s /= F, r *= L, s *= L, G.push(l - r, m - s, O, P, Q, N), G.push(l + r, m + s, O, P, Q, N), d = 1; I - 1 > d; d++)l = e[2 * (d - 1)], m = e[2 * (d - 1) + 1], n = e[2 * d], o = e[2 * d + 1], p = e[2 * (d + 1)], q = e[2 * (d + 1) + 1], r = -(m - o), s = l - n, F = Math.sqrt(r * r + s * s), r /= F, s /= F, r *= L, s *= L, t = -(o - q), u = n - p, F = Math.sqrt(t * t + u * u), t /= F, u /= F, t *= L, u *= L, x = -s + m - (-s + o), y = -r + n - (-r + l), z = (-r + l) * (-s + o) - (-r + n) * (-s + m), A = -u + q - (-u + o), B = -t + n - (-t + p), C = (-t + p) * (-u + o) - (-t + n) * (-u + q), D = x * B - A * y, Math.abs(D) < .1 ? (D += 10.1, G.push(n - r, o - s, O, P, Q, N), G.push(n + r, o + s, O, P, Q, N)) : (j = (y * C - B * z) / D, k = (A * z - x * C) / D, E = (j - n) * (j - n) + (k - o) + (k - o), E > 19600 ? (v = r - t, w = s - u, F = Math.sqrt(v * v + w * w), v /= F, w /= F, v *= L, w *= L, G.push(n - v, o - w), G.push(O, P, Q, N), G.push(n + v, o + w), G.push(O, P, Q, N), G.push(n - v, o - w), G.push(O, P, Q, N), J++) : (G.push(j, k), G.push(O, P, Q, N), G.push(n - (j - n), o - (k - o)), G.push(O, P, Q, N)));
            for (l = e[2 * (I - 2)], m = e[2 * (I - 2) + 1], n = e[2 * (I - 1)], o = e[2 * (I - 1) + 1], r = -(m - o), s = l - n, F = Math.sqrt(r * r + s * s), r /= F, s /= F, r *= L, s *= L, G.push(n - r, o - s), G.push(O, P, Q, N), G.push(n + r, o + s), G.push(O, P, Q, N), H.push(K), d = 0; J > d; d++)H.push(K++);
            H.push(K - 1)
        }
    }, b.WebGLGraphics.buildComplexPoly = function (a, c) {
        var d = a.points.slice();
        if (!(d.length < 6)) {
            var e = c.indices;
            c.points = d, c.alpha = a.fillAlpha, c.color = b.hex2rgb(a.fillColor);
            for (var f, g, h = 1 / 0, i = -1 / 0, j = 1 / 0, k = -1 / 0, l = 0; l < d.length; l += 2)f = d[l], g = d[l + 1], h = h > f ? f : h, i = f > i ? f : i, j = j > g ? g : j, k = g > k ? g : k;
            d.push(h, j, i, j, i, k, h, k);
            var m = d.length / 2;
            for (l = 0; m > l; l++)e.push(l)
        }
    }, b.WebGLGraphics.buildPoly = function (a, c) {
        var d = a.points;
        if (!(d.length < 6)) {
            var e = c.points, f = c.indices, g = d.length / 2, h = b.hex2rgb(a.fillColor), i = a.fillAlpha, j = h[0] * i, k = h[1] * i, l = h[2] * i, m = b.PolyK.Triangulate(d), n = e.length / 6, o = 0;
            for (o = 0; o < m.length; o += 3)f.push(m[o] + n), f.push(m[o] + n), f.push(m[o + 1] + n), f.push(m[o + 2] + n), f.push(m[o + 2] + n);
            for (o = 0; g > o; o++)e.push(d[2 * o], d[2 * o + 1], j, k, l, i)
        }
    }, b.WebGLGraphics.graphicsDataPool = [], b.WebGLGraphicsData = function (a) {
        this.gl = a, this.color = [0, 0, 0], this.points = [], this.indices = [], this.lastIndex = 0, this.buffer = a.createBuffer(), this.indexBuffer = a.createBuffer(), this.mode = 1, this.alpha = 1, this.dirty = !0
    }, b.WebGLGraphicsData.prototype.reset = function () {
        this.points = [], this.indices = [], this.lastIndex = 0
    }, b.WebGLGraphicsData.prototype.upload = function () {
        var a = this.gl;
        this.glPoints = new Float32Array(this.points), a.bindBuffer(a.ARRAY_BUFFER, this.buffer), a.bufferData(a.ARRAY_BUFFER, this.glPoints, a.STATIC_DRAW), this.glIndicies = new Uint16Array(this.indices), a.bindBuffer(a.ELEMENT_ARRAY_BUFFER, this.indexBuffer), a.bufferData(a.ELEMENT_ARRAY_BUFFER, this.glIndicies, a.STATIC_DRAW), this.dirty = !1
    }, b.glContexts = [], b.WebGLRenderer = function (a, c, d, e, f, g) {
        b.defaultRenderer || (b.sayHello("webGL"), b.defaultRenderer = this), this.type = b.WEBGL_RENDERER, this.transparent = !!e, this.preserveDrawingBuffer = g, this.width = a || 800, this.height = c || 600, this.view = d || document.createElement("canvas"), this.view.width = this.width, this.view.height = this.height, this.contextLost = this.handleContextLost.bind(this), this.contextRestoredLost = this.handleContextRestored.bind(this), this.view.addEventListener("webglcontextlost", this.contextLost, !1), this.view.addEventListener("webglcontextrestored", this.contextRestoredLost, !1), this.options = {
            alpha: this.transparent,
            antialias: !!f,
            premultipliedAlpha: !!e,
            stencil: !0,
            preserveDrawingBuffer: g
        };
        var h = null;
        if (["experimental-webgl", "webgl"].forEach(function (a) {
                try {
                    h = h || this.view.getContext(a, this.options)
                } catch (b) {
                }
            }, this), !h)throw new Error("This browser does not support webGL. Try using the canvas renderer" + this);
        this.gl = h, this.glContextId = h.id = b.WebGLRenderer.glContextId++, b.glContexts[this.glContextId] = h, b.blendModesWebGL || (b.blendModesWebGL = [], b.blendModesWebGL[b.blendModes.NORMAL] = [h.ONE, h.ONE_MINUS_SRC_ALPHA], b.blendModesWebGL[b.blendModes.ADD] = [h.SRC_ALPHA, h.DST_ALPHA], b.blendModesWebGL[b.blendModes.MULTIPLY] = [h.DST_COLOR, h.ONE_MINUS_SRC_ALPHA], b.blendModesWebGL[b.blendModes.SCREEN] = [h.SRC_ALPHA, h.ONE], b.blendModesWebGL[b.blendModes.OVERLAY] = [h.ONE, h.ONE_MINUS_SRC_ALPHA], b.blendModesWebGL[b.blendModes.DARKEN] = [h.ONE, h.ONE_MINUS_SRC_ALPHA], b.blendModesWebGL[b.blendModes.LIGHTEN] = [h.ONE, h.ONE_MINUS_SRC_ALPHA], b.blendModesWebGL[b.blendModes.COLOR_DODGE] = [h.ONE, h.ONE_MINUS_SRC_ALPHA], b.blendModesWebGL[b.blendModes.COLOR_BURN] = [h.ONE, h.ONE_MINUS_SRC_ALPHA], b.blendModesWebGL[b.blendModes.HARD_LIGHT] = [h.ONE, h.ONE_MINUS_SRC_ALPHA], b.blendModesWebGL[b.blendModes.SOFT_LIGHT] = [h.ONE, h.ONE_MINUS_SRC_ALPHA], b.blendModesWebGL[b.blendModes.DIFFERENCE] = [h.ONE, h.ONE_MINUS_SRC_ALPHA], b.blendModesWebGL[b.blendModes.EXCLUSION] = [h.ONE, h.ONE_MINUS_SRC_ALPHA], b.blendModesWebGL[b.blendModes.HUE] = [h.ONE, h.ONE_MINUS_SRC_ALPHA], b.blendModesWebGL[b.blendModes.SATURATION] = [h.ONE, h.ONE_MINUS_SRC_ALPHA], b.blendModesWebGL[b.blendModes.COLOR] = [h.ONE, h.ONE_MINUS_SRC_ALPHA], b.blendModesWebGL[b.blendModes.LUMINOSITY] = [h.ONE, h.ONE_MINUS_SRC_ALPHA]), this.projection = new b.Point, this.projection.x = this.width / 2, this.projection.y = -this.height / 2, this.offset = new b.Point(0, 0), this.resize(this.width, this.height), this.contextLost = !1, this.shaderManager = new b.WebGLShaderManager(h), this.spriteBatch = new b.WebGLSpriteBatch(h), this.maskManager = new b.WebGLMaskManager(h), this.filterManager = new b.WebGLFilterManager(h, this.transparent), this.stencilManager = new b.WebGLStencilManager(h), this.blendModeManager = new b.WebGLBlendModeManager(h), this.renderSession = {}, this.renderSession.gl = this.gl, this.renderSession.drawCount = 0, this.renderSession.shaderManager = this.shaderManager, this.renderSession.maskManager = this.maskManager, this.renderSession.filterManager = this.filterManager, this.renderSession.blendModeManager = this.blendModeManager, this.renderSession.spriteBatch = this.spriteBatch, this.renderSession.stencilManager = this.stencilManager, this.renderSession.renderer = this, h.useProgram(this.shaderManager.defaultShader.program), h.disable(h.DEPTH_TEST), h.disable(h.CULL_FACE), h.enable(h.BLEND), h.colorMask(!0, !0, !0, this.transparent)
    }, b.WebGLRenderer.prototype.constructor = b.WebGLRenderer, b.WebGLRenderer.prototype.render = function (a) {
        if (!this.contextLost) {
            this.__stage !== a && (a.interactive && a.interactionManager.removeEvents(), this.__stage = a), b.WebGLRenderer.updateTextures(), a.updateTransform(), a._interactive && (a._interactiveEventsAdded || (a._interactiveEventsAdded = !0, a.interactionManager.setTarget(this)));
            var c = this.gl;
            c.viewport(0, 0, this.width, this.height), c.bindFramebuffer(c.FRAMEBUFFER, null), this.transparent ? c.clearColor(0, 0, 0, 0) : c.clearColor(a.backgroundColorSplit[0], a.backgroundColorSplit[1], a.backgroundColorSplit[2], 1), c.clear(c.COLOR_BUFFER_BIT), this.renderDisplayObject(a, this.projection), a.interactive ? a._interactiveEventsAdded || (a._interactiveEventsAdded = !0, a.interactionManager.setTarget(this)) : a._interactiveEventsAdded && (a._interactiveEventsAdded = !1, a.interactionManager.setTarget(this))
        }
    }, b.WebGLRenderer.prototype.renderDisplayObject = function (a, c, d) {
        this.renderSession.blendModeManager.setBlendMode(b.blendModes.NORMAL), this.renderSession.drawCount = 0, this.renderSession.currentBlendMode = 9999, this.renderSession.projection = c, this.renderSession.offset = this.offset, this.spriteBatch.begin(this.renderSession), this.filterManager.begin(this.renderSession, d), a._renderWebGL(this.renderSession), this.spriteBatch.end()
    }, b.WebGLRenderer.updateTextures = function () {
        var a = 0;
        for (a = 0; a < b.Texture.frameUpdates.length; a++)b.WebGLRenderer.updateTextureFrame(b.Texture.frameUpdates[a]);
        for (a = 0; a < b.texturesToDestroy.length; a++)b.WebGLRenderer.destroyTexture(b.texturesToDestroy[a]);
        b.texturesToUpdate.length = 0, b.texturesToDestroy.length = 0, b.Texture.frameUpdates.length = 0
    }, b.WebGLRenderer.destroyTexture = function (a) {
        for (var c = a._glTextures.length - 1; c >= 0; c--) {
            var d = a._glTextures[c], e = b.glContexts[c];
            e && d && e.deleteTexture(d)
        }
        a._glTextures.length = 0
    }, b.WebGLRenderer.updateTextureFrame = function (a) {
        a._updateWebGLuvs()
    }, b.WebGLRenderer.prototype.resize = function (a, b) {
        this.width = a, this.height = b, this.view.width = a, this.view.height = b, this.gl.viewport(0, 0, this.width, this.height), this.projection.x = this.width / 2, this.projection.y = -this.height / 2
    }, b.createWebGLTexture = function (a, c) {
        return a.hasLoaded && (a._glTextures[c.id] = c.createTexture(), c.bindTexture(c.TEXTURE_2D, a._glTextures[c.id]), c.pixelStorei(c.UNPACK_PREMULTIPLY_ALPHA_WEBGL, a.premultipliedAlpha), c.texImage2D(c.TEXTURE_2D, 0, c.RGBA, c.RGBA, c.UNSIGNED_BYTE, a.source), c.texParameteri(c.TEXTURE_2D, c.TEXTURE_MAG_FILTER, a.scaleMode === b.scaleModes.LINEAR ? c.LINEAR : c.NEAREST), c.texParameteri(c.TEXTURE_2D, c.TEXTURE_MIN_FILTER, a.scaleMode === b.scaleModes.LINEAR ? c.LINEAR : c.NEAREST), a._powerOf2 ? (c.texParameteri(c.TEXTURE_2D, c.TEXTURE_WRAP_S, c.REPEAT), c.texParameteri(c.TEXTURE_2D, c.TEXTURE_WRAP_T, c.REPEAT)) : (c.texParameteri(c.TEXTURE_2D, c.TEXTURE_WRAP_S, c.CLAMP_TO_EDGE), c.texParameteri(c.TEXTURE_2D, c.TEXTURE_WRAP_T, c.CLAMP_TO_EDGE)), c.bindTexture(c.TEXTURE_2D, null), a._dirty[c.id] = !1), a._glTextures[c.id]
    }, b.updateWebGLTexture = function (a, c) {
        a._glTextures[c.id] && (c.bindTexture(c.TEXTURE_2D, a._glTextures[c.id]), c.pixelStorei(c.UNPACK_PREMULTIPLY_ALPHA_WEBGL, a.premultipliedAlpha), c.texImage2D(c.TEXTURE_2D, 0, c.RGBA, c.RGBA, c.UNSIGNED_BYTE, a.source), c.texParameteri(c.TEXTURE_2D, c.TEXTURE_MAG_FILTER, a.scaleMode === b.scaleModes.LINEAR ? c.LINEAR : c.NEAREST), c.texParameteri(c.TEXTURE_2D, c.TEXTURE_MIN_FILTER, a.scaleMode === b.scaleModes.LINEAR ? c.LINEAR : c.NEAREST), a._powerOf2 ? (c.texParameteri(c.TEXTURE_2D, c.TEXTURE_WRAP_S, c.REPEAT), c.texParameteri(c.TEXTURE_2D, c.TEXTURE_WRAP_T, c.REPEAT)) : (c.texParameteri(c.TEXTURE_2D, c.TEXTURE_WRAP_S, c.CLAMP_TO_EDGE), c.texParameteri(c.TEXTURE_2D, c.TEXTURE_WRAP_T, c.CLAMP_TO_EDGE)), a._dirty[c.id] = !1)
    }, b.WebGLRenderer.prototype.handleContextLost = function (a) {
        a.preventDefault(), this.contextLost = !0
    }, b.WebGLRenderer.prototype.handleContextRestored = function () {
        try {
            this.gl = this.view.getContext("experimental-webgl", this.options)
        } catch (a) {
            try {
                this.gl = this.view.getContext("webgl", this.options)
            } catch (c) {
                throw new Error(" This browser does not support webGL. Try using the canvas renderer" + this)
            }
        }
        var d = this.gl;
        d.id = b.WebGLRenderer.glContextId++, this.shaderManager.setContext(d), this.spriteBatch.setContext(d), this.primitiveBatch.setContext(d), this.maskManager.setContext(d), this.filterManager.setContext(d), this.renderSession.gl = this.gl, d.disable(d.DEPTH_TEST), d.disable(d.CULL_FACE), d.enable(d.BLEND), d.colorMask(!0, !0, !0, this.transparent), this.gl.viewport(0, 0, this.width, this.height);
        for (var e in b.TextureCache) {
            var f = b.TextureCache[e].baseTexture;
            f._glTextures = []
        }
        this.contextLost = !1
    }, b.WebGLRenderer.prototype.destroy = function () {
        this.view.removeEventListener("webglcontextlost", this.contextLost), this.view.removeEventListener("webglcontextrestored", this.contextRestoredLost), b.glContexts[this.glContextId] = null, this.projection = null, this.offset = null, this.shaderManager.destroy(), this.spriteBatch.destroy(), this.primitiveBatch.destroy(), this.maskManager.destroy(), this.filterManager.destroy(), this.shaderManager = null, this.spriteBatch = null, this.maskManager = null, this.filterManager = null, this.gl = null, this.renderSession = null
    }, b.WebGLRenderer.glContextId = 0, b.WebGLBlendModeManager = function (a) {
        this.gl = a, this.currentBlendMode = 99999
    }, b.WebGLBlendModeManager.prototype.setBlendMode = function (a) {
        if (this.currentBlendMode === a)return !1;
        this.currentBlendMode = a;
        var c = b.blendModesWebGL[this.currentBlendMode];
        return this.gl.blendFunc(c[0], c[1]), !0
    }, b.WebGLBlendModeManager.prototype.destroy = function () {
        this.gl = null
    }, b.WebGLMaskManager = function (a) {
        this.maskStack = [], this.maskPosition = 0, this.setContext(a), this.reverse = !1, this.count = 0
    }, b.WebGLMaskManager.prototype.setContext = function (a) {
        this.gl = a
    }, b.WebGLMaskManager.prototype.pushMask = function (a, c) {
        var d = c.gl;
        a.dirty && b.WebGLGraphics.updateGraphics(a, d), a._webGL[d.id].data.length && c.stencilManager.pushStencil(a, a._webGL[d.id].data[0], c)
    }, b.WebGLMaskManager.prototype.popMask = function (a, b) {
        var c = this.gl;
        b.stencilManager.popStencil(a, a._webGL[c.id].data[0], b)
    }, b.WebGLMaskManager.prototype.destroy = function () {
        this.maskStack = null, this.gl = null
    }, b.WebGLStencilManager = function (a) {
        this.stencilStack = [], this.setContext(a), this.reverse = !0, this.count = 0
    }, b.WebGLStencilManager.prototype.setContext = function (a) {
        this.gl = a
    }, b.WebGLStencilManager.prototype.pushStencil = function (a, b, c) {
        var d = this.gl;
        this.bindGraphics(a, b, c), 0 === this.stencilStack.length && (d.enable(d.STENCIL_TEST), d.clear(d.STENCIL_BUFFER_BIT), this.reverse = !0, this.count = 0), this.stencilStack.push(b);
        var e = this.count;
        d.colorMask(!1, !1, !1, !1), d.stencilFunc(d.ALWAYS, 0, 255), d.stencilOp(d.KEEP, d.KEEP, d.INVERT), 1 === b.mode ? (d.drawElements(d.TRIANGLE_FAN, b.indices.length - 4, d.UNSIGNED_SHORT, 0), this.reverse ? (d.stencilFunc(d.EQUAL, 255 - e, 255), d.stencilOp(d.KEEP, d.KEEP, d.DECR)) : (d.stencilFunc(d.EQUAL, e, 255), d.stencilOp(d.KEEP, d.KEEP, d.INCR)), d.drawElements(d.TRIANGLE_FAN, 4, d.UNSIGNED_SHORT, 2 * (b.indices.length - 4)), this.reverse ? d.stencilFunc(d.EQUAL, 255 - (e + 1), 255) : d.stencilFunc(d.EQUAL, e + 1, 255), this.reverse = !this.reverse) : (this.reverse ? (d.stencilFunc(d.EQUAL, e, 255), d.stencilOp(d.KEEP, d.KEEP, d.INCR)) : (d.stencilFunc(d.EQUAL, 255 - e, 255), d.stencilOp(d.KEEP, d.KEEP, d.DECR)), d.drawElements(d.TRIANGLE_STRIP, b.indices.length, d.UNSIGNED_SHORT, 0), this.reverse ? d.stencilFunc(d.EQUAL, e + 1, 255) : d.stencilFunc(d.EQUAL, 255 - (e + 1), 255)), d.colorMask(!0, !0, !0, !0), d.stencilOp(d.KEEP, d.KEEP, d.KEEP), this.count++
    }, b.WebGLStencilManager.prototype.bindGraphics = function (a, c, d) {
        this._currentGraphics = a;
        var e, f = this.gl, g = d.projection, h = d.offset;
        1 === c.mode ? (e = d.shaderManager.complexPrimativeShader, d.shaderManager.setShader(e), f.uniformMatrix3fv(e.translationMatrix, !1, a.worldTransform.toArray(!0)), f.uniform2f(e.projectionVector, g.x, -g.y), f.uniform2f(e.offsetVector, -h.x, -h.y), f.uniform3fv(e.tintColor, b.hex2rgb(a.tint)), f.uniform3fv(e.color, c.color), f.uniform1f(e.alpha, a.worldAlpha * c.alpha), f.bindBuffer(f.ARRAY_BUFFER, c.buffer), f.vertexAttribPointer(e.aVertexPosition, 2, f.FLOAT, !1, 8, 0), f.bindBuffer(f.ELEMENT_ARRAY_BUFFER, c.indexBuffer)) : (e = d.shaderManager.primitiveShader, d.shaderManager.setShader(e), f.uniformMatrix3fv(e.translationMatrix, !1, a.worldTransform.toArray(!0)), f.uniform2f(e.projectionVector, g.x, -g.y), f.uniform2f(e.offsetVector, -h.x, -h.y), f.uniform3fv(e.tintColor, b.hex2rgb(a.tint)), f.uniform1f(e.alpha, a.worldAlpha), f.bindBuffer(f.ARRAY_BUFFER, c.buffer), f.vertexAttribPointer(e.aVertexPosition, 2, f.FLOAT, !1, 24, 0), f.vertexAttribPointer(e.colorAttribute, 4, f.FLOAT, !1, 24, 8), f.bindBuffer(f.ELEMENT_ARRAY_BUFFER, c.indexBuffer))
    }, b.WebGLStencilManager.prototype.popStencil = function (a, b, c) {
        var d = this.gl;
        if (this.stencilStack.pop(), this.count--, 0 === this.stencilStack.length)d.disable(d.STENCIL_TEST); else {
            var e = this.count;
            this.bindGraphics(a, b, c), d.colorMask(!1, !1, !1, !1), 1 === b.mode ? (this.reverse = !this.reverse, this.reverse ? (d.stencilFunc(d.EQUAL, 255 - (e + 1), 255), d.stencilOp(d.KEEP, d.KEEP, d.INCR)) : (d.stencilFunc(d.EQUAL, e + 1, 255), d.stencilOp(d.KEEP, d.KEEP, d.DECR)), d.drawElements(d.TRIANGLE_FAN, 4, d.UNSIGNED_SHORT, 2 * (b.indices.length - 4)), d.stencilFunc(d.ALWAYS, 0, 255), d.stencilOp(d.KEEP, d.KEEP, d.INVERT), d.drawElements(d.TRIANGLE_FAN, b.indices.length - 4, d.UNSIGNED_SHORT, 0), this.reverse ? d.stencilFunc(d.EQUAL, e, 255) : d.stencilFunc(d.EQUAL, 255 - e, 255)) : (this.reverse ? (d.stencilFunc(d.EQUAL, e + 1, 255), d.stencilOp(d.KEEP, d.KEEP, d.DECR)) : (d.stencilFunc(d.EQUAL, 255 - (e + 1), 255), d.stencilOp(d.KEEP, d.KEEP, d.INCR)), d.drawElements(d.TRIANGLE_STRIP, b.indices.length, d.UNSIGNED_SHORT, 0), this.reverse ? d.stencilFunc(d.EQUAL, e, 255) : d.stencilFunc(d.EQUAL, 255 - e, 255)), d.colorMask(!0, !0, !0, !0), d.stencilOp(d.KEEP, d.KEEP, d.KEEP)
        }
    }, b.WebGLStencilManager.prototype.destroy = function () {
        this.maskStack = null, this.gl = null
    }, b.WebGLShaderManager = function (a) {
        this.maxAttibs = 10, this.attribState = [], this.tempAttribState = [], this.shaderMap = [];
        for (var b = 0; b < this.maxAttibs; b++)this.attribState[b] = !1;
        this.setContext(a)
    }, b.WebGLShaderManager.prototype.setContext = function (a) {
        this.gl = a, this.primitiveShader = new b.PrimitiveShader(a), this.complexPrimativeShader = new b.ComplexPrimitiveShader(a), this.defaultShader = new b.PixiShader(a), this.fastShader = new b.PixiFastShader(a), this.stripShader = new b.StripShader(a), this.setShader(this.defaultShader)
    }, b.WebGLShaderManager.prototype.setAttribs = function (a) {
        var b;
        for (b = 0; b < this.tempAttribState.length; b++)this.tempAttribState[b] = !1;
        for (b = 0; b < a.length; b++) {
            var c = a[b];
            this.tempAttribState[c] = !0
        }
        var d = this.gl;
        for (b = 0; b < this.attribState.length; b++)this.attribState[b] !== this.tempAttribState[b] && (this.attribState[b] = this.tempAttribState[b], this.tempAttribState[b] ? d.enableVertexAttribArray(b) : d.disableVertexAttribArray(b))
    }, b.WebGLShaderManager.prototype.setShader = function (a) {
        return this._currentId === a._UID ? !1 : (this._currentId = a._UID, this.currentShader = a, this.gl.useProgram(a.program), this.setAttribs(a.attributes), !0)
    }, b.WebGLShaderManager.prototype.destroy = function () {
        this.attribState = null, this.tempAttribState = null, this.primitiveShader.destroy(), this.defaultShader.destroy(), this.fastShader.destroy(), this.stripShader.destroy(), this.gl = null
    }, b.WebGLSpriteBatch = function (a) {
        this.vertSize = 6, this.size = 2e3;
        var b = 4 * this.size * this.vertSize, c = 6 * this.size;
        this.vertices = new Float32Array(b), this.indices = new Uint16Array(c), this.lastIndexCount = 0;
        for (var d = 0, e = 0; c > d; d += 6, e += 4)this.indices[d + 0] = e + 0, this.indices[d + 1] = e + 1, this.indices[d + 2] = e + 2, this.indices[d + 3] = e + 0, this.indices[d + 4] = e + 2, this.indices[d + 5] = e + 3;
        this.drawing = !1, this.currentBatchSize = 0, this.currentBaseTexture = null, this.setContext(a), this.dirty = !0, this.textures = [], this.blendModes = []
    }, b.WebGLSpriteBatch.prototype.setContext = function (a) {
        this.gl = a, this.vertexBuffer = a.createBuffer(), this.indexBuffer = a.createBuffer(), a.bindBuffer(a.ELEMENT_ARRAY_BUFFER, this.indexBuffer), a.bufferData(a.ELEMENT_ARRAY_BUFFER, this.indices, a.STATIC_DRAW), a.bindBuffer(a.ARRAY_BUFFER, this.vertexBuffer), a.bufferData(a.ARRAY_BUFFER, this.vertices, a.DYNAMIC_DRAW), this.currentBlendMode = 99999
    }, b.WebGLSpriteBatch.prototype.begin = function (a) {
        this.renderSession = a, this.shader = this.renderSession.shaderManager.defaultShader, this.start()
    }, b.WebGLSpriteBatch.prototype.end = function () {
        this.flush()
    }, b.WebGLSpriteBatch.prototype.render = function (a) {
        var b = a.texture;
        this.currentBatchSize >= this.size && (this.flush(), this.currentBaseTexture = b.baseTexture);
        var c = b._uvs;
        if (c) {
            var d, e, f, g, h = a.worldAlpha, i = a.tint, j = this.vertices, k = a.anchor.x, l = a.anchor.y;
            if (b.trim) {
                var m = b.trim;
                e = m.x - k * m.width, d = e + b.crop.width, g = m.y - l * m.height, f = g + b.crop.height
            } else d = b.frame.width * (1 - k), e = b.frame.width * -k, f = b.frame.height * (1 - l), g = b.frame.height * -l;
            var n = 4 * this.currentBatchSize * this.vertSize, o = a.worldTransform, p = o.a, q = o.c, r = o.b, s = o.d, t = o.tx, u = o.ty;
            j[n++] = p * e + r * g + t, j[n++] = s * g + q * e + u, j[n++] = c.x0, j[n++] = c.y0, j[n++] = h, j[n++] = i, j[n++] = p * d + r * g + t, j[n++] = s * g + q * d + u, j[n++] = c.x1, j[n++] = c.y1, j[n++] = h, j[n++] = i, j[n++] = p * d + r * f + t, j[n++] = s * f + q * d + u, j[n++] = c.x2, j[n++] = c.y2, j[n++] = h, j[n++] = i, j[n++] = p * e + r * f + t, j[n++] = s * f + q * e + u, j[n++] = c.x3, j[n++] = c.y3, j[n++] = h, j[n++] = i, this.textures[this.currentBatchSize] = a.texture.baseTexture, this.blendModes[this.currentBatchSize] = a.blendMode, this.currentBatchSize++
        }
    }, b.WebGLSpriteBatch.prototype.renderTilingSprite = function (a) {
        var c = a.tilingTexture;
        this.currentBatchSize >= this.size && (this.flush(), this.currentBaseTexture = c.baseTexture), a._uvs || (a._uvs = new b.TextureUvs);
        var d = a._uvs;
        a.tilePosition.x %= c.baseTexture.width * a.tileScaleOffset.x, a.tilePosition.y %= c.baseTexture.height * a.tileScaleOffset.y;
        var e = a.tilePosition.x / (c.baseTexture.width * a.tileScaleOffset.x), f = a.tilePosition.y / (c.baseTexture.height * a.tileScaleOffset.y), g = a.width / c.baseTexture.width / (a.tileScale.x * a.tileScaleOffset.x), h = a.height / c.baseTexture.height / (a.tileScale.y * a.tileScaleOffset.y);
        d.x0 = 0 - e, d.y0 = 0 - f, d.x1 = 1 * g - e, d.y1 = 0 - f, d.x2 = 1 * g - e, d.y2 = 1 * h - f, d.x3 = 0 - e, d.y3 = 1 * h - f;
        var i = a.worldAlpha, j = a.tint, k = this.vertices, l = a.width, m = a.height, n = a.anchor.x, o = a.anchor.y, p = l * (1 - n), q = l * -n, r = m * (1 - o), s = m * -o, t = 4 * this.currentBatchSize * this.vertSize, u = a.worldTransform, v = u.a, w = u.c, x = u.b, y = u.d, z = u.tx, A = u.ty;
        k[t++] = v * q + x * s + z, k[t++] = y * s + w * q + A, k[t++] = d.x0, k[t++] = d.y0, k[t++] = i, k[t++] = j, k[t++] = v * p + x * s + z, k[t++] = y * s + w * p + A, k[t++] = d.x1, k[t++] = d.y1, k[t++] = i, k[t++] = j, k[t++] = v * p + x * r + z, k[t++] = y * r + w * p + A, k[t++] = d.x2, k[t++] = d.y2, k[t++] = i, k[t++] = j, k[t++] = v * q + x * r + z, k[t++] = y * r + w * q + A, k[t++] = d.x3, k[t++] = d.y3, k[t++] = i, k[t++] = j, this.textures[this.currentBatchSize] = c.baseTexture, this.blendModes[this.currentBatchSize] = a.blendMode, this.currentBatchSize++
    }, b.WebGLSpriteBatch.prototype.flush = function () {
        if (0 !== this.currentBatchSize) {
            var a = this.gl;
            if (this.renderSession.shaderManager.setShader(this.renderSession.shaderManager.defaultShader), this.dirty) {
                this.dirty = !1, a.activeTexture(a.TEXTURE0), a.bindBuffer(a.ARRAY_BUFFER, this.vertexBuffer), a.bindBuffer(a.ELEMENT_ARRAY_BUFFER, this.indexBuffer);
                var b = this.renderSession.projection;
                a.uniform2f(this.shader.projectionVector, b.x, b.y);
                var c = 4 * this.vertSize;
                a.vertexAttribPointer(this.shader.aVertexPosition, 2, a.FLOAT, !1, c, 0), a.vertexAttribPointer(this.shader.aTextureCoord, 2, a.FLOAT, !1, c, 8), a.vertexAttribPointer(this.shader.colorAttribute, 2, a.FLOAT, !1, c, 16)
            }
            if (this.currentBatchSize > .5 * this.size)a.bufferSubData(a.ARRAY_BUFFER, 0, this.vertices); else {
                var d = this.vertices.subarray(0, 4 * this.currentBatchSize * this.vertSize);
                a.bufferSubData(a.ARRAY_BUFFER, 0, d)
            }
            for (var e, f, g = 0, h = 0, i = null, j = this.renderSession.blendModeManager.currentBlendMode, k = 0, l = this.currentBatchSize; l > k; k++)e = this.textures[k], f = this.blendModes[k], (i !== e || j !== f) && (this.renderBatch(i, g, h), h = k, g = 0, i = e, j = f, this.renderSession.blendModeManager.setBlendMode(j)), g++;
            this.renderBatch(i, g, h), this.currentBatchSize = 0
        }
    }, b.WebGLSpriteBatch.prototype.renderBatch = function (a, c, d) {
        if (0 !== c) {
            var e = this.gl;
            e.bindTexture(e.TEXTURE_2D, a._glTextures[e.id] || b.createWebGLTexture(a, e)), a._dirty[e.id] && b.updateWebGLTexture(this.currentBaseTexture, e), e.drawElements(e.TRIANGLES, 6 * c, e.UNSIGNED_SHORT, 6 * d * 2), this.renderSession.drawCount++
        }
    }, b.WebGLSpriteBatch.prototype.stop = function () {
        this.flush()
    }, b.WebGLSpriteBatch.prototype.start = function () {
        this.dirty = !0
    }, b.WebGLSpriteBatch.prototype.destroy = function () {
        this.vertices = null, this.indices = null, this.gl.deleteBuffer(this.vertexBuffer), this.gl.deleteBuffer(this.indexBuffer), this.currentBaseTexture = null, this.gl = null
    }, b.WebGLFastSpriteBatch = function (a) {
        this.vertSize = 10, this.maxSize = 6e3, this.size = this.maxSize;
        var b = 4 * this.size * this.vertSize, c = 6 * this.maxSize;
        this.vertices = new Float32Array(b), this.indices = new Uint16Array(c), this.vertexBuffer = null, this.indexBuffer = null, this.lastIndexCount = 0;
        for (var d = 0, e = 0; c > d; d += 6, e += 4)this.indices[d + 0] = e + 0, this.indices[d + 1] = e + 1, this.indices[d + 2] = e + 2, this.indices[d + 3] = e + 0, this.indices[d + 4] = e + 2, this.indices[d + 5] = e + 3;
        this.drawing = !1, this.currentBatchSize = 0, this.currentBaseTexture = null, this.currentBlendMode = 0, this.renderSession = null, this.shader = null, this.matrix = null, this.setContext(a)
    }, b.WebGLFastSpriteBatch.prototype.setContext = function (a) {
        this.gl = a, this.vertexBuffer = a.createBuffer(), this.indexBuffer = a.createBuffer(), a.bindBuffer(a.ELEMENT_ARRAY_BUFFER, this.indexBuffer), a.bufferData(a.ELEMENT_ARRAY_BUFFER, this.indices, a.STATIC_DRAW), a.bindBuffer(a.ARRAY_BUFFER, this.vertexBuffer), a.bufferData(a.ARRAY_BUFFER, this.vertices, a.DYNAMIC_DRAW)
    },b.WebGLFastSpriteBatch.prototype.begin = function (a, b) {
        this.renderSession = b, this.shader = this.renderSession.shaderManager.fastShader, this.matrix = a.worldTransform.toArray(!0), this.start()
    },b.WebGLFastSpriteBatch.prototype.end = function () {
        this.flush()
    },b.WebGLFastSpriteBatch.prototype.render = function (a) {
        var b = a.children, c = b[0];
        if (c.texture._uvs) {
            this.currentBaseTexture = c.texture.baseTexture, c.blendMode !== this.renderSession.blendModeManager.currentBlendMode && (this.flush(), this.renderSession.blendModeManager.setBlendMode(c.blendMode));
            for (var d = 0, e = b.length; e > d; d++)this.renderSprite(b[d]);
            this.flush()
        }
    },b.WebGLFastSpriteBatch.prototype.renderSprite = function (a) {
        if (a.visible && (a.texture.baseTexture === this.currentBaseTexture || (this.flush(), this.currentBaseTexture = a.texture.baseTexture, a.texture._uvs))) {
            var b, c, d, e, f, g, h, i, j = this.vertices;
            if (b = a.texture._uvs, c = a.texture.frame.width, d = a.texture.frame.height, a.texture.trim) {
                var k = a.texture.trim;
                f = k.x - a.anchor.x * k.width, e = f + a.texture.crop.width, h = k.y - a.anchor.y * k.height, g = h + a.texture.crop.height
            } else e = a.texture.frame.width * (1 - a.anchor.x), f = a.texture.frame.width * -a.anchor.x, g = a.texture.frame.height * (1 - a.anchor.y), h = a.texture.frame.height * -a.anchor.y;
            i = 4 * this.currentBatchSize * this.vertSize, j[i++] = f, j[i++] = h, j[i++] = a.position.x, j[i++] = a.position.y, j[i++] = a.scale.x, j[i++] = a.scale.y, j[i++] = a.rotation, j[i++] = b.x0, j[i++] = b.y1, j[i++] = a.alpha, j[i++] = e, j[i++] = h, j[i++] = a.position.x, j[i++] = a.position.y, j[i++] = a.scale.x, j[i++] = a.scale.y, j[i++] = a.rotation, j[i++] = b.x1, j[i++] = b.y1, j[i++] = a.alpha, j[i++] = e, j[i++] = g, j[i++] = a.position.x, j[i++] = a.position.y, j[i++] = a.scale.x, j[i++] = a.scale.y, j[i++] = a.rotation, j[i++] = b.x2, j[i++] = b.y2, j[i++] = a.alpha, j[i++] = f, j[i++] = g, j[i++] = a.position.x, j[i++] = a.position.y, j[i++] = a.scale.x, j[i++] = a.scale.y, j[i++] = a.rotation, j[i++] = b.x3, j[i++] = b.y3, j[i++] = a.alpha, this.currentBatchSize++, this.currentBatchSize >= this.size && this.flush()
        }
    },b.WebGLFastSpriteBatch.prototype.flush = function () {
        if (0 !== this.currentBatchSize) {
            var a = this.gl;
            if (this.currentBaseTexture._glTextures[a.id] || b.createWebGLTexture(this.currentBaseTexture, a), a.bindTexture(a.TEXTURE_2D, this.currentBaseTexture._glTextures[a.id]), this.currentBatchSize > .5 * this.size)a.bufferSubData(a.ARRAY_BUFFER, 0, this.vertices); else {
                var c = this.vertices.subarray(0, 4 * this.currentBatchSize * this.vertSize);
                a.bufferSubData(a.ARRAY_BUFFER, 0, c)
            }
            a.drawElements(a.TRIANGLES, 6 * this.currentBatchSize, a.UNSIGNED_SHORT, 0), this.currentBatchSize = 0, this.renderSession.drawCount++
        }
    },b.WebGLFastSpriteBatch.prototype.stop = function () {
        this.flush()
    },b.WebGLFastSpriteBatch.prototype.start = function () {
        var a = this.gl;
        a.activeTexture(a.TEXTURE0), a.bindBuffer(a.ARRAY_BUFFER, this.vertexBuffer), a.bindBuffer(a.ELEMENT_ARRAY_BUFFER, this.indexBuffer);
        var b = this.renderSession.projection;
        a.uniform2f(this.shader.projectionVector, b.x, b.y), a.uniformMatrix3fv(this.shader.uMatrix, !1, this.matrix);
        var c = 4 * this.vertSize;
        a.vertexAttribPointer(this.shader.aVertexPosition, 2, a.FLOAT, !1, c, 0), a.vertexAttribPointer(this.shader.aPositionCoord, 2, a.FLOAT, !1, c, 8), a.vertexAttribPointer(this.shader.aScale, 2, a.FLOAT, !1, c, 16), a.vertexAttribPointer(this.shader.aRotation, 1, a.FLOAT, !1, c, 24), a.vertexAttribPointer(this.shader.aTextureCoord, 2, a.FLOAT, !1, c, 28), a.vertexAttribPointer(this.shader.colorAttribute, 1, a.FLOAT, !1, c, 36)
    },b.WebGLFilterManager = function (a, b) {
        this.transparent = b, this.filterStack = [], this.offsetX = 0, this.offsetY = 0, this.setContext(a)
    },b.WebGLFilterManager.prototype.setContext = function (a) {
        this.gl = a, this.texturePool = [], this.initShaderBuffers()
    },b.WebGLFilterManager.prototype.begin = function (a, b) {
        this.renderSession = a, this.defaultShader = a.shaderManager.defaultShader;
        var c = this.renderSession.projection;
        this.width = 2 * c.x, this.height = 2 * -c.y, this.buffer = b
    },b.WebGLFilterManager.prototype.pushFilter = function (a) {
        var c = this.gl, d = this.renderSession.projection, e = this.renderSession.offset;
        a._filterArea = a.target.filterArea || a.target.getBounds(), this.filterStack.push(a);
        var f = a.filterPasses[0];
        this.offsetX += a._filterArea.x, this.offsetY += a._filterArea.y;
        var g = this.texturePool.pop();
        g ? g.resize(this.width, this.height) : g = new b.FilterTexture(this.gl, this.width, this.height), c.bindTexture(c.TEXTURE_2D, g.texture);
        var h = a._filterArea, i = f.padding;
        h.x -= i, h.y -= i, h.width += 2 * i, h.height += 2 * i, h.x < 0 && (h.x = 0), h.width > this.width && (h.width = this.width), h.y < 0 && (h.y = 0), h.height > this.height && (h.height = this.height), c.bindFramebuffer(c.FRAMEBUFFER, g.frameBuffer), c.viewport(0, 0, h.width, h.height), d.x = h.width / 2, d.y = -h.height / 2, e.x = -h.x, e.y = -h.y, this.renderSession.shaderManager.setShader(this.defaultShader), c.uniform2f(this.defaultShader.projectionVector, h.width / 2, -h.height / 2), c.uniform2f(this.defaultShader.offsetVector, -h.x, -h.y), c.colorMask(!0, !0, !0, !0), c.clearColor(0, 0, 0, 0), c.clear(c.COLOR_BUFFER_BIT), a._glFilterTexture = g
    },b.WebGLFilterManager.prototype.popFilter = function () {
        var a = this.gl, c = this.filterStack.pop(), d = c._filterArea, e = c._glFilterTexture, f = this.renderSession.projection, g = this.renderSession.offset;
        if (c.filterPasses.length > 1) {
            a.viewport(0, 0, d.width, d.height), a.bindBuffer(a.ARRAY_BUFFER, this.vertexBuffer), this.vertexArray[0] = 0, this.vertexArray[1] = d.height, this.vertexArray[2] = d.width, this.vertexArray[3] = d.height, this.vertexArray[4] = 0, this.vertexArray[5] = 0, this.vertexArray[6] = d.width, this.vertexArray[7] = 0, a.bufferSubData(a.ARRAY_BUFFER, 0, this.vertexArray), a.bindBuffer(a.ARRAY_BUFFER, this.uvBuffer), this.uvArray[2] = d.width / this.width, this.uvArray[5] = d.height / this.height, this.uvArray[6] = d.width / this.width, this.uvArray[7] = d.height / this.height, a.bufferSubData(a.ARRAY_BUFFER, 0, this.uvArray);
            var h = e, i = this.texturePool.pop();
            i || (i = new b.FilterTexture(this.gl, this.width, this.height)), i.resize(this.width, this.height), a.bindFramebuffer(a.FRAMEBUFFER, i.frameBuffer), a.clear(a.COLOR_BUFFER_BIT), a.disable(a.BLEND);
            for (var j = 0; j < c.filterPasses.length - 1; j++) {
                var k = c.filterPasses[j];
                a.bindFramebuffer(a.FRAMEBUFFER, i.frameBuffer), a.activeTexture(a.TEXTURE0), a.bindTexture(a.TEXTURE_2D, h.texture), this.applyFilterPass(k, d, d.width, d.height);
                var l = h;
                h = i, i = l
            }
            a.enable(a.BLEND), e = h, this.texturePool.push(i)
        }
        var m = c.filterPasses[c.filterPasses.length - 1];
        this.offsetX -= d.x, this.offsetY -= d.y;
        var n = this.width, o = this.height, p = 0, q = 0, r = this.buffer;
        if (0 === this.filterStack.length)a.colorMask(!0, !0, !0, !0); else {
            var s = this.filterStack[this.filterStack.length - 1];
            d = s._filterArea, n = d.width, o = d.height, p = d.x, q = d.y, r = s._glFilterTexture.frameBuffer
        }
        f.x = n / 2, f.y = -o / 2, g.x = p, g.y = q, d = c._filterArea;
        var t = d.x - p, u = d.y - q;
        a.bindBuffer(a.ARRAY_BUFFER, this.vertexBuffer), this.vertexArray[0] = t, this.vertexArray[1] = u + d.height, this.vertexArray[2] = t + d.width, this.vertexArray[3] = u + d.height, this.vertexArray[4] = t, this.vertexArray[5] = u, this.vertexArray[6] = t + d.width, this.vertexArray[7] = u, a.bufferSubData(a.ARRAY_BUFFER, 0, this.vertexArray), a.bindBuffer(a.ARRAY_BUFFER, this.uvBuffer), this.uvArray[2] = d.width / this.width, this.uvArray[5] = d.height / this.height, this.uvArray[6] = d.width / this.width, this.uvArray[7] = d.height / this.height, a.bufferSubData(a.ARRAY_BUFFER, 0, this.uvArray), a.viewport(0, 0, n, o), a.bindFramebuffer(a.FRAMEBUFFER, r), a.activeTexture(a.TEXTURE0), a.bindTexture(a.TEXTURE_2D, e.texture), this.applyFilterPass(m, d, n, o), this.renderSession.shaderManager.setShader(this.defaultShader), a.uniform2f(this.defaultShader.projectionVector, n / 2, -o / 2), a.uniform2f(this.defaultShader.offsetVector, -p, -q), this.texturePool.push(e), c._glFilterTexture = null
    },b.WebGLFilterManager.prototype.applyFilterPass = function (a, c, d, e) {
        var f = this.gl, g = a.shaders[f.id];
        g || (g = new b.PixiShader(f), g.fragmentSrc = a.fragmentSrc, g.uniforms = a.uniforms, g.init(), a.shaders[f.id] = g), this.renderSession.shaderManager.setShader(g), f.uniform2f(g.projectionVector, d / 2, -e / 2), f.uniform2f(g.offsetVector, 0, 0), a.uniforms.dimensions && (a.uniforms.dimensions.value[0] = this.width, a.uniforms.dimensions.value[1] = this.height, a.uniforms.dimensions.value[2] = this.vertexArray[0], a.uniforms.dimensions.value[3] = this.vertexArray[5]), g.syncUniforms(), f.bindBuffer(f.ARRAY_BUFFER, this.vertexBuffer), f.vertexAttribPointer(g.aVertexPosition, 2, f.FLOAT, !1, 0, 0), f.bindBuffer(f.ARRAY_BUFFER, this.uvBuffer), f.vertexAttribPointer(g.aTextureCoord, 2, f.FLOAT, !1, 0, 0), f.bindBuffer(f.ARRAY_BUFFER, this.colorBuffer), f.vertexAttribPointer(g.colorAttribute, 2, f.FLOAT, !1, 0, 0), f.bindBuffer(f.ELEMENT_ARRAY_BUFFER, this.indexBuffer), f.drawElements(f.TRIANGLES, 6, f.UNSIGNED_SHORT, 0), this.renderSession.drawCount++
    },b.WebGLFilterManager.prototype.initShaderBuffers = function () {
        var a = this.gl;
        this.vertexBuffer = a.createBuffer(), this.uvBuffer = a.createBuffer(), this.colorBuffer = a.createBuffer(), this.indexBuffer = a.createBuffer(), this.vertexArray = new Float32Array([0, 0, 1, 0, 0, 1, 1, 1]), a.bindBuffer(a.ARRAY_BUFFER, this.vertexBuffer), a.bufferData(a.ARRAY_BUFFER, this.vertexArray, a.STATIC_DRAW), this.uvArray = new Float32Array([0, 0, 1, 0, 0, 1, 1, 1]), a.bindBuffer(a.ARRAY_BUFFER, this.uvBuffer), a.bufferData(a.ARRAY_BUFFER, this.uvArray, a.STATIC_DRAW), this.colorArray = new Float32Array([1, 16777215, 1, 16777215, 1, 16777215, 1, 16777215]), a.bindBuffer(a.ARRAY_BUFFER, this.colorBuffer), a.bufferData(a.ARRAY_BUFFER, this.colorArray, a.STATIC_DRAW), a.bindBuffer(a.ELEMENT_ARRAY_BUFFER, this.indexBuffer), a.bufferData(a.ELEMENT_ARRAY_BUFFER, new Uint16Array([0, 1, 2, 1, 3, 2]), a.STATIC_DRAW)
    },b.WebGLFilterManager.prototype.destroy = function () {
        var a = this.gl;
        this.filterStack = null, this.offsetX = 0, this.offsetY = 0;
        for (var b = 0; b < this.texturePool.length; b++)this.texturePool[b].destroy();
        this.texturePool = null, a.deleteBuffer(this.vertexBuffer), a.deleteBuffer(this.uvBuffer), a.deleteBuffer(this.colorBuffer), a.deleteBuffer(this.indexBuffer)
    },b.FilterTexture = function (a, c, d, e) {
        this.gl = a, this.frameBuffer = a.createFramebuffer(), this.texture = a.createTexture(), e = e || b.scaleModes.DEFAULT, a.bindTexture(a.TEXTURE_2D, this.texture), a.texParameteri(a.TEXTURE_2D, a.TEXTURE_MAG_FILTER, e === b.scaleModes.LINEAR ? a.LINEAR : a.NEAREST), a.texParameteri(a.TEXTURE_2D, a.TEXTURE_MIN_FILTER, e === b.scaleModes.LINEAR ? a.LINEAR : a.NEAREST), a.texParameteri(a.TEXTURE_2D, a.TEXTURE_WRAP_S, a.CLAMP_TO_EDGE), a.texParameteri(a.TEXTURE_2D, a.TEXTURE_WRAP_T, a.CLAMP_TO_EDGE), a.bindFramebuffer(a.FRAMEBUFFER, this.framebuffer), a.bindFramebuffer(a.FRAMEBUFFER, this.frameBuffer), a.framebufferTexture2D(a.FRAMEBUFFER, a.COLOR_ATTACHMENT0, a.TEXTURE_2D, this.texture, 0), this.renderBuffer = a.createRenderbuffer(), a.bindRenderbuffer(a.RENDERBUFFER, this.renderBuffer), a.framebufferRenderbuffer(a.FRAMEBUFFER, a.DEPTH_STENCIL_ATTACHMENT, a.RENDERBUFFER, this.renderBuffer), this.resize(c, d)
    },b.FilterTexture.prototype.clear = function () {
        var a = this.gl;
        a.clearColor(0, 0, 0, 0), a.clear(a.COLOR_BUFFER_BIT)
    },b.FilterTexture.prototype.resize = function (a, b) {
        if (this.width !== a || this.height !== b) {
            this.width = a, this.height = b;
            var c = this.gl;
            c.bindTexture(c.TEXTURE_2D, this.texture), c.texImage2D(c.TEXTURE_2D, 0, c.RGBA, a, b, 0, c.RGBA, c.UNSIGNED_BYTE, null), c.bindRenderbuffer(c.RENDERBUFFER, this.renderBuffer), c.renderbufferStorage(c.RENDERBUFFER, c.DEPTH_STENCIL, a, b)
        }
    },b.FilterTexture.prototype.destroy = function () {
        var a = this.gl;
        a.deleteFramebuffer(this.frameBuffer), a.deleteTexture(this.texture), this.frameBuffer = null, this.texture = null
    },b.CanvasMaskManager = function () {
    },b.CanvasMaskManager.prototype.pushMask = function (a, c) {
        c.save();
        var d = a.alpha, e = a.worldTransform;
        c.setTransform(e.a, e.c, e.b, e.d, e.tx, e.ty), b.CanvasGraphics.renderGraphicsMask(a, c), c.clip(), a.worldAlpha = d
    },b.CanvasMaskManager.prototype.popMask = function (a) {
        a.restore()
    },b.CanvasTinter = function () {
    },b.CanvasTinter.getTintedTexture = function (a, c) {
        var d = a.texture;
        c = b.CanvasTinter.roundColor(c);
        var e = "#" + ("00000" + (0 | c).toString(16)).substr(-6);
        if (d.tintCache = d.tintCache || {}, d.tintCache[e])return d.tintCache[e];
        var f = b.CanvasTinter.canvas || document.createElement("canvas");
        if (b.CanvasTinter.tintMethod(d, c, f), b.CanvasTinter.convertTintToImage) {
            var g = new Image;
            g.src = f.toDataURL(), d.tintCache[e] = g
        } else d.tintCache[e] = f, b.CanvasTinter.canvas = null;
        return f
    },b.CanvasTinter.tintWithMultiply = function (a, b, c) {
        var d = c.getContext("2d"), e = a.frame;
        c.width = e.width, c.height = e.height, d.fillStyle = "#" + ("00000" + (0 | b).toString(16)).substr(-6), d.fillRect(0, 0, e.width, e.height), d.globalCompositeOperation = "multiply", d.drawImage(a.baseTexture.source, e.x, e.y, e.width, e.height, 0, 0, e.width, e.height), d.globalCompositeOperation = "destination-atop", d.drawImage(a.baseTexture.source, e.x, e.y, e.width, e.height, 0, 0, e.width, e.height)
    },b.CanvasTinter.tintWithOverlay = function (a, b, c) {
        var d = c.getContext("2d"), e = a.frame;
        c.width = e.width, c.height = e.height, d.globalCompositeOperation = "copy", d.fillStyle = "#" + ("00000" + (0 | b).toString(16)).substr(-6), d.fillRect(0, 0, e.width, e.height), d.globalCompositeOperation = "destination-atop", d.drawImage(a.baseTexture.source, e.x, e.y, e.width, e.height, 0, 0, e.width, e.height)
    },b.CanvasTinter.tintWithPerPixel = function (a, c, d) {
        var e = d.getContext("2d"), f = a.frame;
        d.width = f.width, d.height = f.height, e.globalCompositeOperation = "copy", e.drawImage(a.baseTexture.source, f.x, f.y, f.width, f.height, 0, 0, f.width, f.height);
        for (var g = b.hex2rgb(c), h = g[0], i = g[1], j = g[2], k = e.getImageData(0, 0, f.width, f.height), l = k.data, m = 0; m < l.length; m += 4)l[m + 0] *= h, l[m + 1] *= i, l[m + 2] *= j;
        e.putImageData(k, 0, 0)
    },b.CanvasTinter.roundColor = function (a) {
        var c = b.CanvasTinter.cacheStepsPerColorChannel, d = b.hex2rgb(a);
        return d[0] = Math.min(255, d[0] / c * c), d[1] = Math.min(255, d[1] / c * c), d[2] = Math.min(255, d[2] / c * c), b.rgb2hex(d)
    },b.CanvasTinter.cacheStepsPerColorChannel = 8,b.CanvasTinter.convertTintToImage = !1,b.CanvasTinter.canUseMultiply = b.canUseNewCanvasBlendModes(),b.CanvasTinter.tintMethod = b.CanvasTinter.canUseMultiply ? b.CanvasTinter.tintWithMultiply : b.CanvasTinter.tintWithPerPixel,b.CanvasRenderer = function (a, c, d, e) {
        b.defaultRenderer || (b.sayHello("Canvas"), b.defaultRenderer = this), this.type = b.CANVAS_RENDERER, this.clearBeforeRender = !0, this.transparent = !!e, b.blendModesCanvas || (b.blendModesCanvas = [], b.canUseNewCanvasBlendModes() ? (b.blendModesCanvas[b.blendModes.NORMAL] = "source-over", b.blendModesCanvas[b.blendModes.ADD] = "lighter", b.blendModesCanvas[b.blendModes.MULTIPLY] = "multiply", b.blendModesCanvas[b.blendModes.SCREEN] = "screen", b.blendModesCanvas[b.blendModes.OVERLAY] = "overlay", b.blendModesCanvas[b.blendModes.DARKEN] = "darken", b.blendModesCanvas[b.blendModes.LIGHTEN] = "lighten", b.blendModesCanvas[b.blendModes.COLOR_DODGE] = "color-dodge", b.blendModesCanvas[b.blendModes.COLOR_BURN] = "color-burn", b.blendModesCanvas[b.blendModes.HARD_LIGHT] = "hard-light", b.blendModesCanvas[b.blendModes.SOFT_LIGHT] = "soft-light", b.blendModesCanvas[b.blendModes.DIFFERENCE] = "difference", b.blendModesCanvas[b.blendModes.EXCLUSION] = "exclusion", b.blendModesCanvas[b.blendModes.HUE] = "hue", b.blendModesCanvas[b.blendModes.SATURATION] = "saturation", b.blendModesCanvas[b.blendModes.COLOR] = "color", b.blendModesCanvas[b.blendModes.LUMINOSITY] = "luminosity") : (b.blendModesCanvas[b.blendModes.NORMAL] = "source-over", b.blendModesCanvas[b.blendModes.ADD] = "lighter", b.blendModesCanvas[b.blendModes.MULTIPLY] = "source-over", b.blendModesCanvas[b.blendModes.SCREEN] = "source-over", b.blendModesCanvas[b.blendModes.OVERLAY] = "source-over", b.blendModesCanvas[b.blendModes.DARKEN] = "source-over", b.blendModesCanvas[b.blendModes.LIGHTEN] = "source-over", b.blendModesCanvas[b.blendModes.COLOR_DODGE] = "source-over", b.blendModesCanvas[b.blendModes.COLOR_BURN] = "source-over", b.blendModesCanvas[b.blendModes.HARD_LIGHT] = "source-over", b.blendModesCanvas[b.blendModes.SOFT_LIGHT] = "source-over", b.blendModesCanvas[b.blendModes.DIFFERENCE] = "source-over", b.blendModesCanvas[b.blendModes.EXCLUSION] = "source-over", b.blendModesCanvas[b.blendModes.HUE] = "source-over", b.blendModesCanvas[b.blendModes.SATURATION] = "source-over", b.blendModesCanvas[b.blendModes.COLOR] = "source-over", b.blendModesCanvas[b.blendModes.LUMINOSITY] = "source-over")), this.width = a || 800, this.height = c || 600, this.view = d || document.createElement("canvas"), this.context = this.view.getContext("2d", {alpha: this.transparent}), this.refresh = !0, this.view.width = this.width, this.view.height = this.height, this.count = 0, this.maskManager = new b.CanvasMaskManager, this.renderSession = {
            context: this.context,
            maskManager: this.maskManager,
            scaleMode: null,
            smoothProperty: null,
            roundPixels: !1
        }, "imageSmoothingEnabled"in this.context ? this.renderSession.smoothProperty = "imageSmoothingEnabled" : "webkitImageSmoothingEnabled"in this.context ? this.renderSession.smoothProperty = "webkitImageSmoothingEnabled" : "mozImageSmoothingEnabled"in this.context ? this.renderSession.smoothProperty = "mozImageSmoothingEnabled" : "oImageSmoothingEnabled"in this.context && (this.renderSession.smoothProperty = "oImageSmoothingEnabled")
    },b.CanvasRenderer.prototype.constructor = b.CanvasRenderer,b.CanvasRenderer.prototype.render = function (a) {
        b.texturesToUpdate.length = 0, b.texturesToDestroy.length = 0, a.updateTransform(), this.context.setTransform(1, 0, 0, 1, 0, 0), this.context.globalAlpha = 1, navigator.isCocoonJS && this.view.screencanvas && (this.context.fillStyle = "black", this.context.clear()), !this.transparent && this.clearBeforeRender ? (this.context.fillStyle = a.backgroundColorString, this.context.fillRect(0, 0, this.width, this.height)) : this.transparent && this.clearBeforeRender && this.context.clearRect(0, 0, this.width, this.height), this.renderDisplayObject(a), a.interactive && (a._interactiveEventsAdded || (a._interactiveEventsAdded = !0, a.interactionManager.setTarget(this))), b.Texture.frameUpdates.length > 0 && (b.Texture.frameUpdates.length = 0)
    },b.CanvasRenderer.prototype.resize = function (a, b) {
        this.width = a, this.height = b, this.view.width = a, this.view.height = b
    },b.CanvasRenderer.prototype.renderDisplayObject = function (a, b) {
        this.renderSession.context = b || this.context, a._renderCanvas(this.renderSession)
    },b.CanvasRenderer.prototype.renderStripFlat = function (a) {
        var b = this.context, c = a.verticies, d = c.length / 2;
        this.count++, b.beginPath();
        for (var e = 1; d - 2 > e; e++) {
            var f = 2 * e, g = c[f], h = c[f + 2], i = c[f + 4], j = c[f + 1], k = c[f + 3], l = c[f + 5];
            b.moveTo(g, j), b.lineTo(h, k), b.lineTo(i, l)
        }
        b.fillStyle = "#FF0000", b.fill(), b.closePath()
    },b.CanvasRenderer.prototype.renderStrip = function (a) {
        var b = this.context, c = a.verticies, d = a.uvs, e = c.length / 2;
        this.count++;
        for (var f = 1; e - 2 > f; f++) {
            var g = 2 * f, h = c[g], i = c[g + 2], j = c[g + 4], k = c[g + 1], l = c[g + 3], m = c[g + 5], n = d[g] * a.texture.width, o = d[g + 2] * a.texture.width, p = d[g + 4] * a.texture.width, q = d[g + 1] * a.texture.height, r = d[g + 3] * a.texture.height, s = d[g + 5] * a.texture.height;
            b.save(), b.beginPath(), b.moveTo(h, k), b.lineTo(i, l), b.lineTo(j, m), b.closePath(), b.clip();
            var t = n * r + q * p + o * s - r * p - q * o - n * s, u = h * r + q * j + i * s - r * j - q * i - h * s, v = n * i + h * p + o * j - i * p - h * o - n * j, w = n * r * j + q * i * p + h * o * s - h * r * p - q * o * j - n * i * s, x = k * r + q * m + l * s - r * m - q * l - k * s, y = n * l + k * p + o * m - l * p - k * o - n * m, z = n * r * m + q * l * p + k * o * s - k * r * p - q * o * m - n * l * s;
            b.transform(u / t, x / t, v / t, y / t, w / t, z / t), b.drawImage(a.texture.baseTexture.source, 0, 0), b.restore()
        }
    },b.CanvasBuffer = function (a, b) {
        this.width = a, this.height = b, this.canvas = document.createElement("canvas"), this.context = this.canvas.getContext("2d"), this.canvas.width = a, this.canvas.height = b
    },b.CanvasBuffer.prototype.clear = function () {
        this.context.clearRect(0, 0, this.width, this.height)
    },b.CanvasBuffer.prototype.resize = function (a, b) {
        this.width = this.canvas.width = a, this.height = this.canvas.height = b
    },b.CanvasGraphics = function () {
    },b.CanvasGraphics.renderGraphics = function (a, c) {
        for (var d = a.worldAlpha, e = "", f = 0; f < a.graphicsData.length; f++) {
            var g = a.graphicsData[f], h = g.points;
            if (c.strokeStyle = e = "#" + ("00000" + (0 | g.lineColor).toString(16)).substr(-6), c.lineWidth = g.lineWidth, g.type === b.Graphics.POLY) {
                c.beginPath(), c.moveTo(h[0], h[1]);
                for (var i = 1; i < h.length / 2; i++)c.lineTo(h[2 * i], h[2 * i + 1]);
                h[0] === h[h.length - 2] && h[1] === h[h.length - 1] && c.closePath(), g.fill && (c.globalAlpha = g.fillAlpha * d, c.fillStyle = e = "#" + ("00000" + (0 | g.fillColor).toString(16)).substr(-6), c.fill()), g.lineWidth && (c.globalAlpha = g.lineAlpha * d, c.stroke())
            } else if (g.type === b.Graphics.RECT)(g.fillColor || 0 === g.fillColor) && (c.globalAlpha = g.fillAlpha * d, c.fillStyle = e = "#" + ("00000" + (0 | g.fillColor).toString(16)).substr(-6), c.fillRect(h[0], h[1], h[2], h[3])), g.lineWidth && (c.globalAlpha = g.lineAlpha * d, c.strokeRect(h[0], h[1], h[2], h[3])); else if (g.type === b.Graphics.CIRC)c.beginPath(), c.arc(h[0], h[1], h[2], 0, 2 * Math.PI), c.closePath(), g.fill && (c.globalAlpha = g.fillAlpha * d, c.fillStyle = e = "#" + ("00000" + (0 | g.fillColor).toString(16)).substr(-6), c.fill()), g.lineWidth && (c.globalAlpha = g.lineAlpha * d, c.stroke()); else if (g.type === b.Graphics.ELIP) {
                var j = g.points, k = 2 * j[2], l = 2 * j[3], m = j[0] - k / 2, n = j[1] - l / 2;
                c.beginPath();
                var o = .5522848, p = k / 2 * o, q = l / 2 * o, r = m + k, s = n + l, t = m + k / 2, u = n + l / 2;
                c.moveTo(m, u), c.bezierCurveTo(m, u - q, t - p, n, t, n), c.bezierCurveTo(t + p, n, r, u - q, r, u), c.bezierCurveTo(r, u + q, t + p, s, t, s), c.bezierCurveTo(t - p, s, m, u + q, m, u), c.closePath(), g.fill && (c.globalAlpha = g.fillAlpha * d, c.fillStyle = e = "#" + ("00000" + (0 | g.fillColor).toString(16)).substr(-6), c.fill()), g.lineWidth && (c.globalAlpha = g.lineAlpha * d, c.stroke())
            } else if (g.type === b.Graphics.RREC) {
                var v = h[0], w = h[1], x = h[2], y = h[3], z = h[4], A = Math.min(x, y) / 2 | 0;
                z = z > A ? A : z, c.beginPath(), c.moveTo(v, w + z), c.lineTo(v, w + y - z), c.quadraticCurveTo(v, w + y, v + z, w + y), c.lineTo(v + x - z, w + y), c.quadraticCurveTo(v + x, w + y, v + x, w + y - z), c.lineTo(v + x, w + z), c.quadraticCurveTo(v + x, w, v + x - z, w), c.lineTo(v + z, w), c.quadraticCurveTo(v, w, v, w + z), c.closePath(), (g.fillColor || 0 === g.fillColor) && (c.globalAlpha = g.fillAlpha * d, c.fillStyle = e = "#" + ("00000" + (0 | g.fillColor).toString(16)).substr(-6), c.fill()), g.lineWidth && (c.globalAlpha = g.lineAlpha * d, c.stroke())
            }
        }
    },b.CanvasGraphics.renderGraphicsMask = function (a, c) {
        var d = a.graphicsData.length;
        if (0 !== d) {
            d > 1 && (d = 1, window.console.log("Pixi.js warning: masks in canvas can only mask using the first path in the graphics object"));
            for (var e = 0; 1 > e; e++) {
                var f = a.graphicsData[e], g = f.points;
                if (f.type === b.Graphics.POLY) {
                    c.beginPath(), c.moveTo(g[0], g[1]);
                    for (var h = 1; h < g.length / 2; h++)c.lineTo(g[2 * h], g[2 * h + 1]);
                    g[0] === g[g.length - 2] && g[1] === g[g.length - 1] && c.closePath()
                } else if (f.type === b.Graphics.RECT)c.beginPath(), c.rect(g[0], g[1], g[2], g[3]), c.closePath(); else if (f.type === b.Graphics.CIRC)c.beginPath(), c.arc(g[0], g[1], g[2], 0, 2 * Math.PI), c.closePath(); else if (f.type === b.Graphics.ELIP) {
                    var i = f.points, j = 2 * i[2], k = 2 * i[3], l = i[0] - j / 2, m = i[1] - k / 2;
                    c.beginPath();
                    var n = .5522848, o = j / 2 * n, p = k / 2 * n, q = l + j, r = m + k, s = l + j / 2, t = m + k / 2;
                    c.moveTo(l, t), c.bezierCurveTo(l, t - p, s - o, m, s, m), c.bezierCurveTo(s + o, m, q, t - p, q, t), c.bezierCurveTo(q, t + p, s + o, r, s, r), c.bezierCurveTo(s - o, r, l, t + p, l, t), c.closePath()
                } else if (f.type === b.Graphics.RREC) {
                    var u = g[0], v = g[1], w = g[2], x = g[3], y = g[4], z = Math.min(w, x) / 2 | 0;
                    y = y > z ? z : y, c.beginPath(), c.moveTo(u, v + y), c.lineTo(u, v + x - y), c.quadraticCurveTo(u, v + x, u + y, v + x), c.lineTo(u + w - y, v + x), c.quadraticCurveTo(u + w, v + x, u + w, v + x - y), c.lineTo(u + w, v + y), c.quadraticCurveTo(u + w, v, u + w - y, v), c.lineTo(u + y, v), c.quadraticCurveTo(u, v, u, v + y), c.closePath()
                }
            }
        }
    },b.Graphics = function () {
        b.DisplayObjectContainer.call(this), this.renderable = !0, this.fillAlpha = 1, this.lineWidth = 0, this.lineColor = "black", this.graphicsData = [], this.tint = 16777215, this.blendMode = b.blendModes.NORMAL, this.currentPath = {points: []}, this._webGL = [], this.isMask = !1, this.bounds = null, this.boundsPadding = 10, this.dirty = !0
    },b.Graphics.prototype = Object.create(b.DisplayObjectContainer.prototype),b.Graphics.prototype.constructor = b.Graphics,Object.defineProperty(b.Graphics.prototype, "cacheAsBitmap", {
        get: function () {
            return this._cacheAsBitmap
        }, set: function (a) {
            this._cacheAsBitmap = a, this._cacheAsBitmap ? this._generateCachedSprite() : (this.destroyCachedSprite(), this.dirty = !0)
        }
    }),b.Graphics.prototype.lineStyle = function (a, c, d) {
        return this.currentPath.points.length || this.graphicsData.pop(), this.lineWidth = a || 0, this.lineColor = c || 0, this.lineAlpha = arguments.length < 3 ? 1 : d, this.currentPath = {
            lineWidth: this.lineWidth,
            lineColor: this.lineColor,
            lineAlpha: this.lineAlpha,
            fillColor: this.fillColor,
            fillAlpha: this.fillAlpha,
            fill: this.filling,
            points: [],
            type: b.Graphics.POLY
        }, this.graphicsData.push(this.currentPath), this
    },b.Graphics.prototype.moveTo = function (a, c) {
        return this.currentPath.points.length || this.graphicsData.pop(), this.currentPath = this.currentPath = {
            lineWidth: this.lineWidth,
            lineColor: this.lineColor,
            lineAlpha: this.lineAlpha,
            fillColor: this.fillColor,
            fillAlpha: this.fillAlpha,
            fill: this.filling,
            points: [],
            type: b.Graphics.POLY
        }, this.currentPath.points.push(a, c), this.graphicsData.push(this.currentPath), this
    },b.Graphics.prototype.lineTo = function (a, b) {
        return this.currentPath.points.push(a, b), this.dirty = !0, this
    },b.Graphics.prototype.quadraticCurveTo = function (a, b, c, d) {
        0 === this.currentPath.points.length && this.moveTo(0, 0);
        var e, f, g = 20, h = this.currentPath.points;
        0 === h.length && this.moveTo(0, 0);
        for (var i = h[h.length - 2], j = h[h.length - 1], k = 0, l = 1; g >= l; l++)k = l / g, e = i + (a - i) * k, f = j + (b - j) * k, h.push(e + (a + (c - a) * k - e) * k, f + (b + (d - b) * k - f) * k);
        return this.dirty = !0, this
    },b.Graphics.prototype.bezierCurveTo = function (a, b, c, d, e, f) {
        0 === this.currentPath.points.length && this.moveTo(0, 0);
        for (var g, h, i, j, k, l = 20, m = this.currentPath.points, n = m[m.length - 2], o = m[m.length - 1], p = 0, q = 1; l > q; q++)p = q / l, g = 1 - p, h = g * g, i = h * g, j = p * p, k = j * p, m.push(i * n + 3 * h * p * a + 3 * g * j * c + k * e, i * o + 3 * h * p * b + 3 * g * j * d + k * f);
        return this.dirty = !0, this
    },b.Graphics.prototype.arcTo = function (a, b, c, d, e) {
        0 === this.currentPath.points.length && this.moveTo(a, b);
        var f = this.currentPath.points, g = f[f.length - 2], h = f[f.length - 1], i = h - b, j = g - a, k = d - b, l = c - a, m = Math.abs(i * l - j * k);
        if (1e-8 > m || 0 === e)f.push(a, b); else {
            var n = i * i + j * j, o = k * k + l * l, p = i * k + j * l, q = e * Math.sqrt(n) / m, r = e * Math.sqrt(o) / m, s = q * p / n, t = r * p / o, u = q * l + r * j, v = q * k + r * i, w = j * (r + s), x = i * (r + s), y = l * (q + t), z = k * (q + t), A = Math.atan2(x - v, w - u), B = Math.atan2(z - v, y - u);
            this.arc(u + a, v + b, e, A, B, j * k > l * i)
        }
        return this.dirty = !0, this
    },b.Graphics.prototype.arc = function (a, b, c, d, e, f) {
        var g = a + Math.cos(d) * c, h = b + Math.sin(d) * c, i = this.currentPath.points;
        if ((0 !== i.length && i[i.length - 2] !== g || i[i.length - 1] !== h) && (this.moveTo(g, h), i = this.currentPath.points), d === e)return this;
        !f && d >= e ? e += 2 * Math.PI : f && e >= d && (d += 2 * Math.PI);
        var j = f ? -1 * (d - e) : e - d, k = Math.abs(j) / (2 * Math.PI) * 40;
        if (0 === j)return this;
        for (var l = j / (2 * k), m = 2 * l, n = Math.cos(l), o = Math.sin(l), p = k - 1, q = p % 1 / p, r = 0; p >= r; r++) {
            var s = r + q * r, t = l + d + m * s, u = Math.cos(t), v = -Math.sin(t);
            i.push((n * u + o * v) * c + a, (n * -v + o * u) * c + b)
        }
        return this.dirty = !0, this
    },b.Graphics.prototype.drawPath = function (a) {
        return this.currentPath.points.length || this.graphicsData.pop(), this.currentPath = this.currentPath = {
            lineWidth: this.lineWidth,
            lineColor: this.lineColor,
            lineAlpha: this.lineAlpha,
            fillColor: this.fillColor,
            fillAlpha: this.fillAlpha,
            fill: this.filling,
            points: [],
            type: b.Graphics.POLY
        }, this.graphicsData.push(this.currentPath), this.currentPath.points = this.currentPath.points.concat(a), this.dirty = !0, this
    },b.Graphics.prototype.beginFill = function (a, b) {
        return this.filling = !0, this.fillColor = a || 0, this.fillAlpha = arguments.length < 2 ? 1 : b, this
    },b.Graphics.prototype.endFill = function () {
        return this.filling = !1, this.fillColor = null, this.fillAlpha = 1, this
    },b.Graphics.prototype.drawRect = function (a, c, d, e) {
        return this.currentPath.points.length || this.graphicsData.pop(), this.currentPath = {
            lineWidth: this.lineWidth,
            lineColor: this.lineColor,
            lineAlpha: this.lineAlpha,
            fillColor: this.fillColor,
            fillAlpha: this.fillAlpha,
            fill: this.filling,
            points: [a, c, d, e],
            type: b.Graphics.RECT
        }, this.graphicsData.push(this.currentPath), this.dirty = !0, this
    },b.Graphics.prototype.drawRoundedRect = function (a, c, d, e, f) {
        return this.currentPath.points.length || this.graphicsData.pop(), this.currentPath = {
            lineWidth: this.lineWidth,
            lineColor: this.lineColor,
            lineAlpha: this.lineAlpha,
            fillColor: this.fillColor,
            fillAlpha: this.fillAlpha,
            fill: this.filling,
            points: [a, c, d, e, f],
            type: b.Graphics.RREC
        }, this.graphicsData.push(this.currentPath), this.dirty = !0, this
    },b.Graphics.prototype.drawCircle = function (a, c, d) {
        return this.currentPath.points.length || this.graphicsData.pop(), this.currentPath = {
            lineWidth: this.lineWidth,
            lineColor: this.lineColor,
            lineAlpha: this.lineAlpha,
            fillColor: this.fillColor,
            fillAlpha: this.fillAlpha,
            fill: this.filling,
            points: [a, c, d, d],
            type: b.Graphics.CIRC
        }, this.graphicsData.push(this.currentPath), this.dirty = !0, this
    },b.Graphics.prototype.drawEllipse = function (a, c, d, e) {
        return this.currentPath.points.length || this.graphicsData.pop(), this.currentPath = {
            lineWidth: this.lineWidth,
            lineColor: this.lineColor,
            lineAlpha: this.lineAlpha,
            fillColor: this.fillColor,
            fillAlpha: this.fillAlpha,
            fill: this.filling,
            points: [a, c, d, e],
            type: b.Graphics.ELIP
        }, this.graphicsData.push(this.currentPath), this.dirty = !0, this
    },b.Graphics.prototype.clear = function () {
        return this.lineWidth = 0, this.filling = !1, this.dirty = !0, this.clearDirty = !0, this.graphicsData = [], this.bounds = null, this
    },b.Graphics.prototype.generateTexture = function () {
        var a = this.getBounds(), c = new b.CanvasBuffer(a.width, a.height), d = b.Texture.fromCanvas(c.canvas);
        return c.context.translate(-a.x, -a.y), b.CanvasGraphics.renderGraphics(this, c.context), d
    },b.Graphics.prototype._renderWebGL = function (a) {
        if (this.visible !== !1 && 0 !== this.alpha && this.isMask !== !0) {
            if (this._cacheAsBitmap)return this.dirty && (this._generateCachedSprite(), b.updateWebGLTexture(this._cachedSprite.texture.baseTexture, a.gl), this.dirty = !1), this._cachedSprite.alpha = this.alpha, b.Sprite.prototype._renderWebGL.call(this._cachedSprite, a), void 0;
            if (a.spriteBatch.stop(), a.blendModeManager.setBlendMode(this.blendMode), this._mask && a.maskManager.pushMask(this._mask, a), this._filters && a.filterManager.pushFilter(this._filterBlock), this.blendMode !== a.spriteBatch.currentBlendMode) {
                a.spriteBatch.currentBlendMode = this.blendMode;
                var c = b.blendModesWebGL[a.spriteBatch.currentBlendMode];
                a.spriteBatch.gl.blendFunc(c[0], c[1])
            }
            if (b.WebGLGraphics.renderGraphics(this, a), this.children.length) {
                a.spriteBatch.start();
                for (var d = 0, e = this.children.length; e > d; d++)this.children[d]._renderWebGL(a);
                a.spriteBatch.stop()
            }
            this._filters && a.filterManager.popFilter(), this._mask && a.maskManager.popMask(this.mask, a), a.drawCount++, a.spriteBatch.start()
        }
    },b.Graphics.prototype._renderCanvas = function (a) {
        if (this.visible !== !1 && 0 !== this.alpha && this.isMask !== !0) {
            var c = a.context, d = this.worldTransform;
            this.blendMode !== a.currentBlendMode && (a.currentBlendMode = this.blendMode, c.globalCompositeOperation = b.blendModesCanvas[a.currentBlendMode]), this._mask && a.maskManager.pushMask(this._mask, a.context), c.setTransform(d.a, d.c, d.b, d.d, d.tx, d.ty), b.CanvasGraphics.renderGraphics(this, c);
            for (var e = 0, f = this.children.length; f > e; e++)this.children[e]._renderCanvas(a);
            this._mask && a.maskManager.popMask(a.context)
        }
    },b.Graphics.prototype.getBounds = function (a) {
        this.bounds || this.updateBounds();
        var b = this.bounds.x, c = this.bounds.width + this.bounds.x, d = this.bounds.y, e = this.bounds.height + this.bounds.y, f = a || this.worldTransform, g = f.a, h = f.c, i = f.b, j = f.d, k = f.tx, l = f.ty, m = g * c + i * e + k, n = j * e + h * c + l, o = g * b + i * e + k, p = j * e + h * b + l, q = g * b + i * d + k, r = j * d + h * b + l, s = g * c + i * d + k, t = j * d + h * c + l, u = m, v = n, w = m, x = n;
        w = w > o ? o : w, w = w > q ? q : w, w = w > s ? s : w, x = x > p ? p : x, x = x > r ? r : x, x = x > t ? t : x, u = o > u ? o : u, u = q > u ? q : u, u = s > u ? s : u, v = p > v ? p : v, v = r > v ? r : v, v = t > v ? t : v;
        var y = this._bounds;
        return y.x = w, y.width = u - w, y.y = x, y.height = v - x, y
    },b.Graphics.prototype.updateBounds = function () {
        for (var a, c, d, e, f, g = 1 / 0, h = -1 / 0, i = 1 / 0, j = -1 / 0, k = 0; k < this.graphicsData.length; k++) {
            var l = this.graphicsData[k], m = l.type, n = l.lineWidth;
            if (a = l.points, m === b.Graphics.RECT)c = a[0] - n / 2, d = a[1] - n / 2, e = a[2] + n, f = a[3] + n, g = g > c ? c : g, h = c + e > h ? c + e : h, i = i > d ? c : i, j = d + f > j ? d + f : j; else if (m === b.Graphics.CIRC || m === b.Graphics.ELIP)c = a[0], d = a[1], e = a[2] + n / 2, f = a[3] + n / 2, g = g > c - e ? c - e : g, h = c + e > h ? c + e : h, i = i > d - f ? d - f : i, j = d + f > j ? d + f : j; else for (var o = 0; o < a.length; o += 2)c = a[o], d = a[o + 1], g = g > c - n ? c - n : g, h = c + n > h ? c + n : h, i = i > d - n ? d - n : i, j = d + n > j ? d + n : j
        }
        var p = this.boundsPadding;
        this.bounds = new b.Rectangle(g - p, i - p, h - g + 2 * p, j - i + 2 * p)
    },b.Graphics.prototype._generateCachedSprite = function () {
        var a = this.getLocalBounds();
        if (this._cachedSprite)this._cachedSprite.buffer.resize(a.width, a.height); else {
            var c = new b.CanvasBuffer(a.width, a.height), d = b.Texture.fromCanvas(c.canvas);
            this._cachedSprite = new b.Sprite(d), this._cachedSprite.buffer = c, this._cachedSprite.worldTransform = this.worldTransform
        }
        this._cachedSprite.anchor.x = -(a.x / a.width), this._cachedSprite.anchor.y = -(a.y / a.height), this._cachedSprite.buffer.context.translate(-a.x, -a.y), b.CanvasGraphics.renderGraphics(this, this._cachedSprite.buffer.context), this._cachedSprite.alpha = this.alpha
    },b.Graphics.prototype.destroyCachedSprite = function () {
        this._cachedSprite.texture.destroy(!0), this._cachedSprite = null
    },b.Graphics.POLY = 0,b.Graphics.RECT = 1,b.Graphics.CIRC = 2,b.Graphics.ELIP = 3,b.Graphics.RREC = 4,b.Strip = function (a) {
        b.DisplayObjectContainer.call(this), this.texture = a, this.uvs = new b.Float32Array([0, 1, 1, 1, 1, 0, 0, 1]), this.verticies = new b.Float32Array([0, 0, 100, 0, 100, 100, 0, 100]), this.colors = new b.Float32Array([1, 1, 1, 1]), this.indices = new b.Uint16Array([0, 1, 2, 3]), this.dirty = !0
    },b.Strip.prototype = Object.create(b.DisplayObjectContainer.prototype),b.Strip.prototype.constructor = b.Strip,b.Strip.prototype._renderWebGL = function (a) {
        !this.visible || this.alpha <= 0 || (a.spriteBatch.stop(), this._vertexBuffer || this._initWebGL(a), a.shaderManager.setShader(a.shaderManager.stripShader), this._renderStrip(a), a.spriteBatch.start())
    },b.Strip.prototype._initWebGL = function (a) {
        var b = a.gl;
        this._vertexBuffer = b.createBuffer(), this._indexBuffer = b.createBuffer(), this._uvBuffer = b.createBuffer(), this._colorBuffer = b.createBuffer(), b.bindBuffer(b.ARRAY_BUFFER, this._vertexBuffer), b.bufferData(b.ARRAY_BUFFER, this.verticies, b.DYNAMIC_DRAW), b.bindBuffer(b.ARRAY_BUFFER, this._uvBuffer), b.bufferData(b.ARRAY_BUFFER, this.uvs, b.STATIC_DRAW), b.bindBuffer(b.ARRAY_BUFFER, this._colorBuffer), b.bufferData(b.ARRAY_BUFFER, this.colors, b.STATIC_DRAW), b.bindBuffer(b.ELEMENT_ARRAY_BUFFER, this._indexBuffer), b.bufferData(b.ELEMENT_ARRAY_BUFFER, this.indices, b.STATIC_DRAW)
    },b.Strip.prototype._renderStrip = function (a) {
        var c = a.gl, d = a.projection, e = a.offset, f = a.shaderManager.stripShader;
        c.blendFunc(c.ONE, c.ONE_MINUS_SRC_ALPHA), c.uniformMatrix3fv(f.translationMatrix, !1, this.worldTransform.toArray(!0)), c.uniform2f(f.projectionVector, d.x, -d.y), c.uniform2f(f.offsetVector, -e.x, -e.y), c.uniform1f(f.alpha, 1), this.dirty ? (this.dirty = !1, c.bindBuffer(c.ARRAY_BUFFER, this._vertexBuffer), c.bufferData(c.ARRAY_BUFFER, this.verticies, c.STATIC_DRAW), c.vertexAttribPointer(f.aVertexPosition, 2, c.FLOAT, !1, 0, 0), c.bindBuffer(c.ARRAY_BUFFER, this._uvBuffer), c.bufferData(c.ARRAY_BUFFER, this.uvs, c.STATIC_DRAW), c.vertexAttribPointer(f.aTextureCoord, 2, c.FLOAT, !1, 0, 0), c.activeTexture(c.TEXTURE0), c.bindTexture(c.TEXTURE_2D, this.texture.baseTexture._glTextures[c.id] || b.createWebGLTexture(this.texture.baseTexture, c)), c.bindBuffer(c.ELEMENT_ARRAY_BUFFER, this._indexBuffer), c.bufferData(c.ELEMENT_ARRAY_BUFFER, this.indices, c.STATIC_DRAW)) : (c.bindBuffer(c.ARRAY_BUFFER, this._vertexBuffer), c.bufferSubData(c.ARRAY_BUFFER, 0, this.verticies), c.vertexAttribPointer(f.aVertexPosition, 2, c.FLOAT, !1, 0, 0), c.bindBuffer(c.ARRAY_BUFFER, this._uvBuffer), c.vertexAttribPointer(f.aTextureCoord, 2, c.FLOAT, !1, 0, 0), c.activeTexture(c.TEXTURE0), c.bindTexture(c.TEXTURE_2D, this.texture.baseTexture._glTextures[c.id] || b.createWebGLTexture(this.texture.baseTexture, c)), c.bindBuffer(c.ELEMENT_ARRAY_BUFFER, this._indexBuffer)), c.drawElements(c.TRIANGLE_STRIP, this.indices.length, c.UNSIGNED_SHORT, 0)
    },b.Strip.prototype._renderCanvas = function (a) {
        var b = a.context, c = this.worldTransform;
        a.roundPixels ? b.setTransform(c.a, c.c, c.b, c.d, 0 | c.tx, 0 | c.ty) : b.setTransform(c.a, c.c, c.b, c.d, c.tx, c.ty);
        var d = this, e = d.verticies, f = d.uvs, g = e.length / 2;
        this.count++;
        for (var h = 0; g - 2 > h; h++) {
            var i = 2 * h, j = e[i], k = e[i + 2], l = e[i + 4], m = e[i + 1], n = e[i + 3], o = e[i + 5], p = (j + k + l) / 3, q = (m + n + o) / 3, r = j - p, s = m - q, t = Math.sqrt(r * r + s * s);
            j = p + r / t * (t + 3), m = q + s / t * (t + 3), r = k - p, s = n - q, t = Math.sqrt(r * r + s * s), k = p + r / t * (t + 3), n = q + s / t * (t + 3), r = l - p, s = o - q, t = Math.sqrt(r * r + s * s), l = p + r / t * (t + 3), o = q + s / t * (t + 3);
            var u = f[i] * d.texture.width, v = f[i + 2] * d.texture.width, w = f[i + 4] * d.texture.width, x = f[i + 1] * d.texture.height, y = f[i + 3] * d.texture.height, z = f[i + 5] * d.texture.height;
            b.save(), b.beginPath(), b.moveTo(j, m), b.lineTo(k, n), b.lineTo(l, o), b.closePath(), b.clip();
            var A = u * y + x * w + v * z - y * w - x * v - u * z, B = j * y + x * l + k * z - y * l - x * k - j * z, C = u * k + j * w + v * l - k * w - j * v - u * l, D = u * y * l + x * k * w + j * v * z - j * y * w - x * v * l - u * k * z, E = m * y + x * o + n * z - y * o - x * n - m * z, F = u * n + m * w + v * o - n * w - m * v - u * o, G = u * y * o + x * n * w + m * v * z - m * y * w - x * v * o - u * n * z;
            b.transform(B / A, E / A, C / A, F / A, D / A, G / A), b.drawImage(d.texture.baseTexture.source, 0, 0), b.restore()
        }
    },b.Strip.prototype.onTextureUpdate = function () {
        this.updateFrame = !0
    },b.Rope = function (a, c) {
        b.Strip.call(this, a), this.points = c, this.verticies = new b.Float32Array(4 * c.length), this.uvs = new b.Float32Array(4 * c.length), this.colors = new b.Float32Array(2 * c.length), this.indices = new b.Uint16Array(2 * c.length), this.refresh()
    },b.Rope.prototype = Object.create(b.Strip.prototype),b.Rope.prototype.constructor = b.Rope,b.Rope.prototype.refresh = function () {
        var a = this.points;
        if (!(a.length < 1)) {
            var b = this.uvs, c = a[0], d = this.indices, e = this.colors;
            this.count -= .2, b[0] = 0, b[1] = 0, b[2] = 0, b[3] = 1, e[0] = 1, e[1] = 1, d[0] = 0, d[1] = 1;
            for (var f, g, h, i = a.length, j = 1; i > j; j++)f = a[j], g = 4 * j, h = j / (i - 1), j % 2 ? (b[g] = h, b[g + 1] = 0, b[g + 2] = h, b[g + 3] = 1) : (b[g] = h, b[g + 1] = 0, b[g + 2] = h, b[g + 3] = 1), g = 2 * j, e[g] = 1, e[g + 1] = 1, g = 2 * j, d[g] = g, d[g + 1] = g + 1, c = f
        }
    },b.Rope.prototype.updateTransform = function () {
        var a = this.points;
        if (!(a.length < 1)) {
            var c, d = a[0], e = {x: 0, y: 0};
            this.count -= .2;
            for (var f, g, h, i, j, k = this.verticies, l = a.length, m = 0; l > m; m++)f = a[m], g = 4 * m, c = m < a.length - 1 ? a[m + 1] : f, e.y = -(c.x - d.x), e.x = c.y - d.y, h = 10 * (1 - m / (l - 1)), h > 1 && (h = 1), i = Math.sqrt(e.x * e.x + e.y * e.y), j = this.texture.height / 2, e.x /= i, e.y /= i, e.x *= j, e.y *= j, k[g] = f.x + e.x, k[g + 1] = f.y + e.y, k[g + 2] = f.x - e.x, k[g + 3] = f.y - e.y, d = f;
            b.DisplayObjectContainer.prototype.updateTransform.call(this)
        }
    },b.Rope.prototype.setTexture = function (a) {
        this.texture = a
    },b.TilingSprite = function (a, c, d) {
        b.Sprite.call(this, a), this._width = c || 100, this._height = d || 100, this.tileScale = new b.Point(1, 1), this.tileScaleOffset = new b.Point(1, 1), this.tilePosition = new b.Point(0, 0), this.renderable = !0, this.tint = 16777215, this.blendMode = b.blendModes.NORMAL
    },b.TilingSprite.prototype = Object.create(b.Sprite.prototype),b.TilingSprite.prototype.constructor = b.TilingSprite,Object.defineProperty(b.TilingSprite.prototype, "width", {
        get: function () {
            return this._width
        }, set: function (a) {
            this._width = a
        }
    }),Object.defineProperty(b.TilingSprite.prototype, "height", {
        get: function () {
            return this._height
        }, set: function (a) {
            this._height = a
        }
    }),b.TilingSprite.prototype.setTexture = function (a) {
        this.texture !== a && (this.texture = a, this.refreshTexture = !0, this.cachedTint = 16777215)
    },b.TilingSprite.prototype._renderWebGL = function (a) {
        if (this.visible !== !1 && 0 !== this.alpha) {
            var c, d;
            for (this._mask && (a.spriteBatch.stop(), a.maskManager.pushMask(this.mask, a), a.spriteBatch.start()), this._filters && (a.spriteBatch.flush(), a.filterManager.pushFilter(this._filterBlock)), !this.tilingTexture || this.refreshTexture ? (this.generateTilingTexture(!0), this.tilingTexture && this.tilingTexture.needsUpdate && (b.updateWebGLTexture(this.tilingTexture.baseTexture, a.gl), this.tilingTexture.needsUpdate = !1)) : a.spriteBatch.renderTilingSprite(this), c = 0, d = this.children.length; d > c; c++)this.children[c]._renderWebGL(a);
            a.spriteBatch.stop(), this._filters && a.filterManager.popFilter(), this._mask && a.maskManager.popMask(a), a.spriteBatch.start()
        }
    },b.TilingSprite.prototype._renderCanvas = function (a) {
        if (this.visible !== !1 && 0 !== this.alpha) {
            var c = a.context;
            this._mask && a.maskManager.pushMask(this._mask, c), c.globalAlpha = this.worldAlpha;
            var d, e, f = this.worldTransform;
            if (c.setTransform(f.a, f.c, f.b, f.d, f.tx, f.ty), !this.__tilePattern || this.refreshTexture) {
                if (this.generateTilingTexture(!1), !this.tilingTexture)return;
                this.__tilePattern = c.createPattern(this.tilingTexture.baseTexture.source, "repeat")
            }
            this.blendMode !== a.currentBlendMode && (a.currentBlendMode = this.blendMode, c.globalCompositeOperation = b.blendModesCanvas[a.currentBlendMode]);
            var g = this.tilePosition, h = this.tileScale;
            for (g.x %= this.tilingTexture.baseTexture.width, g.y %= this.tilingTexture.baseTexture.height, c.scale(h.x, h.y), c.translate(g.x, g.y), c.fillStyle = this.__tilePattern, c.fillRect(-g.x + this.anchor.x * -this._width, -g.y + this.anchor.y * -this._height, this._width / h.x, this._height / h.y), c.scale(1 / h.x, 1 / h.y), c.translate(-g.x, -g.y), this._mask && a.maskManager.popMask(a.context), d = 0, e = this.children.length; e > d; d++)this.children[d]._renderCanvas(a)
        }
    },b.TilingSprite.prototype.getBounds = function () {
        var a = this._width, b = this._height, c = a * (1 - this.anchor.x), d = a * -this.anchor.x, e = b * (1 - this.anchor.y), f = b * -this.anchor.y, g = this.worldTransform, h = g.a, i = g.c, j = g.b, k = g.d, l = g.tx, m = g.ty, n = h * d + j * f + l, o = k * f + i * d + m, p = h * c + j * f + l, q = k * f + i * c + m, r = h * c + j * e + l, s = k * e + i * c + m, t = h * d + j * e + l, u = k * e + i * d + m, v = -1 / 0, w = -1 / 0, x = 1 / 0, y = 1 / 0;
        x = x > n ? n : x, x = x > p ? p : x, x = x > r ? r : x, x = x > t ? t : x, y = y > o ? o : y, y = y > q ? q : y, y = y > s ? s : y, y = y > u ? u : y, v = n > v ? n : v, v = p > v ? p : v, v = r > v ? r : v, v = t > v ? t : v, w = o > w ? o : w, w = q > w ? q : w, w = s > w ? s : w, w = u > w ? u : w;
        var z = this._bounds;
        return z.x = x, z.width = v - x, z.y = y, z.height = w - y, this._currentBounds = z, z
    },b.TilingSprite.prototype.onTextureUpdate = function () {
    },b.TilingSprite.prototype.generateTilingTexture = function (a) {
        if (this.texture.baseTexture.hasLoaded) {
            var c, d, e = this.texture, f = e.frame, g = f.width !== e.baseTexture.width || f.height !== e.baseTexture.height, h = !1;
            if (a ? (c = b.getNextPowerOfTwo(f.width), d = b.getNextPowerOfTwo(f.height), (f.width !== c || f.height !== d) && (h = !0)) : g && (c = f.width, d = f.height, h = !0), h) {
                var i;
                this.tilingTexture && this.tilingTexture.isTiling ? (i = this.tilingTexture.canvasBuffer, i.resize(c, d), this.tilingTexture.baseTexture.width = c, this.tilingTexture.baseTexture.height = d, this.tilingTexture.needsUpdate = !0) : (i = new b.CanvasBuffer(c, d), this.tilingTexture = b.Texture.fromCanvas(i.canvas), this.tilingTexture.canvasBuffer = i, this.tilingTexture.isTiling = !0), i.context.drawImage(e.baseTexture.source, e.crop.x, e.crop.y, e.crop.width, e.crop.height, 0, 0, c, d), this.tileScaleOffset.x = f.width / c, this.tileScaleOffset.y = f.height / d
            } else this.tilingTexture && this.tilingTexture.isTiling && this.tilingTexture.destroy(!0), this.tileScaleOffset.x = 1, this.tileScaleOffset.y = 1, this.tilingTexture = e;
            this.refreshTexture = !1, this.tilingTexture.baseTexture._powerOf2 = !0
        }
    };
    var f = {};
    f.BoneData = function (a, b) {
        this.name = a, this.parent = b
    }, f.BoneData.prototype = {length: 0, x: 0, y: 0, rotation: 0, scaleX: 1, scaleY: 1}, f.SlotData = function (a, b) {
        this.name = a, this.boneData = b
    }, f.SlotData.prototype = {r: 1, g: 1, b: 1, a: 1, attachmentName: null}, f.Bone = function (a, b) {
        this.data = a, this.parent = b, this.setToSetupPose()
    }, f.Bone.yDown = !1, f.Bone.prototype = {
        x: 0,
        y: 0,
        rotation: 0,
        scaleX: 1,
        scaleY: 1,
        m00: 0,
        m01: 0,
        worldX: 0,
        m10: 0,
        m11: 0,
        worldY: 0,
        worldRotation: 0,
        worldScaleX: 1,
        worldScaleY: 1,
        updateWorldTransform: function (a, b) {
            var c = this.parent;
            null != c ? (this.worldX = this.x * c.m00 + this.y * c.m01 + c.worldX, this.worldY = this.x * c.m10 + this.y * c.m11 + c.worldY, this.worldScaleX = c.worldScaleX * this.scaleX, this.worldScaleY = c.worldScaleY * this.scaleY, this.worldRotation = c.worldRotation + this.rotation) : (this.worldX = this.x, this.worldY = this.y, this.worldScaleX = this.scaleX, this.worldScaleY = this.scaleY, this.worldRotation = this.rotation);
            var d = this.worldRotation * Math.PI / 180, e = Math.cos(d), g = Math.sin(d);
            this.m00 = e * this.worldScaleX, this.m10 = g * this.worldScaleX, this.m01 = -g * this.worldScaleY, this.m11 = e * this.worldScaleY, a && (this.m00 = -this.m00, this.m01 = -this.m01), b && (this.m10 = -this.m10, this.m11 = -this.m11), f.Bone.yDown && (this.m10 = -this.m10, this.m11 = -this.m11)
        },
        setToSetupPose: function () {
            var a = this.data;
            this.x = a.x, this.y = a.y, this.rotation = a.rotation, this.scaleX = a.scaleX, this.scaleY = a.scaleY
        }
    }, f.Slot = function (a, b, c) {
        this.data = a, this.skeleton = b, this.bone = c, this.setToSetupPose()
    }, f.Slot.prototype = {
        r: 1, g: 1, b: 1, a: 1, _attachmentTime: 0, attachment: null, setAttachment: function (a) {
            this.attachment = a, this._attachmentTime = this.skeleton.time
        }, setAttachmentTime: function (a) {
            this._attachmentTime = this.skeleton.time - a
        }, getAttachmentTime: function () {
            return this.skeleton.time - this._attachmentTime
        }, setToSetupPose: function () {
            var a = this.data;
            this.r = a.r, this.g = a.g, this.b = a.b, this.a = a.a;
            for (var b = this.skeleton.data.slots, c = 0, d = b.length; d > c; c++)if (b[c] == a) {
                this.setAttachment(a.attachmentName ? this.skeleton.getAttachmentBySlotIndex(c, a.attachmentName) : null);
                break
            }
        }
    }, f.Skin = function (a) {
        this.name = a, this.attachments = {}
    }, f.Skin.prototype = {
        addAttachment: function (a, b, c) {
            this.attachments[a + ":" + b] = c
        }, getAttachment: function (a, b) {
            return this.attachments[a + ":" + b]
        }, _attachAll: function (a, b) {
            for (var c in b.attachments) {
                var d = c.indexOf(":"), e = parseInt(c.substring(0, d), 10), f = c.substring(d + 1), g = a.slots[e];
                if (g.attachment && g.attachment.name == f) {
                    var h = this.getAttachment(e, f);
                    h && g.setAttachment(h)
                }
            }
        }
    }, f.Animation = function (a, b, c) {
        this.name = a, this.timelines = b, this.duration = c
    }, f.Animation.prototype = {
        apply: function (a, b, c) {
            c && this.duration && (b %= this.duration);
            for (var d = this.timelines, e = 0, f = d.length; f > e; e++)d[e].apply(a, b, 1)
        }, mix: function (a, b, c, d) {
            c && this.duration && (b %= this.duration);
            for (var e = this.timelines, f = 0, g = e.length; g > f; f++)e[f].apply(a, b, d)
        }
    }, f.binarySearch = function (a, b, c) {
        var d = 0, e = Math.floor(a.length / c) - 2;
        if (!e)return c;
        for (var f = e >>> 1; ;) {
            if (a[(f + 1) * c] <= b ? d = f + 1 : e = f, d == e)return (d + 1) * c;
            f = d + e >>> 1
        }
    }, f.linearSearch = function (a, b, c) {
        for (var d = 0, e = a.length - c; e >= d; d += c)if (a[d] > b)return d;
        return -1
    }, f.Curves = function (a) {
        this.curves = [], this.curves.length = 6 * (a - 1)
    }, f.Curves.prototype = {
        setLinear: function (a) {
            this.curves[6 * a] = 0
        }, setStepped: function (a) {
            this.curves[6 * a] = -1
        }, setCurve: function (a, b, c, d, e) {
            var f = .1, g = f * f, h = g * f, i = 3 * f, j = 3 * g, k = 6 * g, l = 6 * h, m = 2 * -b + d, n = 2 * -c + e, o = 3 * (b - d) + 1, p = 3 * (c - e) + 1, q = 6 * a, r = this.curves;
            r[q] = b * i + m * j + o * h, r[q + 1] = c * i + n * j + p * h, r[q + 2] = m * k + o * l, r[q + 3] = n * k + p * l, r[q + 4] = o * l, r[q + 5] = p * l
        }, getCurvePercent: function (a, b) {
            b = 0 > b ? 0 : b > 1 ? 1 : b;
            var c = 6 * a, d = this.curves, e = d[c];
            if (!e)return b;
            if (-1 == e)return 0;
            for (var f = d[c + 1], g = d[c + 2], h = d[c + 3], i = d[c + 4], j = d[c + 5], k = e, l = f, m = 8; ;) {
                if (k >= b) {
                    var n = k - e, o = l - f;
                    return o + (l - o) * (b - n) / (k - n)
                }
                if (!m)break;
                m--, e += g, f += h, g += i, h += j, k += e, l += f
            }
            return l + (1 - l) * (b - k) / (1 - k)
        }
    }, f.RotateTimeline = function (a) {
        this.curves = new f.Curves(a), this.frames = [], this.frames.length = 2 * a
    }, f.RotateTimeline.prototype = {
        boneIndex: 0, getFrameCount: function () {
            return this.frames.length / 2
        }, setFrame: function (a, b, c) {
            a *= 2, this.frames[a] = b, this.frames[a + 1] = c
        }, apply: function (a, b, c) {
            var d, e = this.frames;
            if (!(b < e[0])) {
                var g = a.bones[this.boneIndex];
                if (b >= e[e.length - 2]) {
                    for (d = g.data.rotation + e[e.length - 1] - g.rotation; d > 180;)d -= 360;
                    for (; -180 > d;)d += 360;
                    return g.rotation += d * c, void 0
                }
                var h = f.binarySearch(e, b, 2), i = e[h - 1], j = e[h], k = 1 - (b - j) / (e[h - 2] - j);
                for (k = this.curves.getCurvePercent(h / 2 - 1, k), d = e[h + 1] - i; d > 180;)d -= 360;
                for (; -180 > d;)d += 360;
                for (d = g.data.rotation + (i + d * k) - g.rotation; d > 180;)d -= 360;
                for (; -180 > d;)d += 360;
                g.rotation += d * c
            }
        }
    }, f.TranslateTimeline = function (a) {
        this.curves = new f.Curves(a), this.frames = [], this.frames.length = 3 * a
    }, f.TranslateTimeline.prototype = {
        boneIndex: 0, getFrameCount: function () {
            return this.frames.length / 3
        }, setFrame: function (a, b, c, d) {
            a *= 3, this.frames[a] = b, this.frames[a + 1] = c, this.frames[a + 2] = d
        }, apply: function (a, b, c) {
            var d = this.frames;
            if (!(b < d[0])) {
                var e = a.bones[this.boneIndex];
                if (b >= d[d.length - 3])return e.x += (e.data.x + d[d.length - 2] - e.x) * c, e.y += (e.data.y + d[d.length - 1] - e.y) * c, void 0;
                var g = f.binarySearch(d, b, 3), h = d[g - 2], i = d[g - 1], j = d[g], k = 1 - (b - j) / (d[g + -3] - j);
                k = this.curves.getCurvePercent(g / 3 - 1, k), e.x += (e.data.x + h + (d[g + 1] - h) * k - e.x) * c, e.y += (e.data.y + i + (d[g + 2] - i) * k - e.y) * c
            }
        }
    }, f.ScaleTimeline = function (a) {
        this.curves = new f.Curves(a), this.frames = [], this.frames.length = 3 * a
    }, f.ScaleTimeline.prototype = {
        boneIndex: 0, getFrameCount: function () {
            return this.frames.length / 3
        }, setFrame: function (a, b, c, d) {
            a *= 3, this.frames[a] = b, this.frames[a + 1] = c, this.frames[a + 2] = d
        }, apply: function (a, b, c) {
            var d = this.frames;
            if (!(b < d[0])) {
                var e = a.bones[this.boneIndex];
                if (b >= d[d.length - 3])return e.scaleX += (e.data.scaleX - 1 + d[d.length - 2] - e.scaleX) * c, e.scaleY += (e.data.scaleY - 1 + d[d.length - 1] - e.scaleY) * c, void 0;
                var g = f.binarySearch(d, b, 3), h = d[g - 2], i = d[g - 1], j = d[g], k = 1 - (b - j) / (d[g + -3] - j);
                k = this.curves.getCurvePercent(g / 3 - 1, k), e.scaleX += (e.data.scaleX - 1 + h + (d[g + 1] - h) * k - e.scaleX) * c, e.scaleY += (e.data.scaleY - 1 + i + (d[g + 2] - i) * k - e.scaleY) * c
            }
        }
    }, f.ColorTimeline = function (a) {
        this.curves = new f.Curves(a), this.frames = [], this.frames.length = 5 * a
    }, f.ColorTimeline.prototype = {
        slotIndex: 0, getFrameCount: function () {
            return this.frames.length / 5
        }, setFrame: function (a, b, c, d, e, f) {
            a *= 5, this.frames[a] = b, this.frames[a + 1] = c, this.frames[a + 2] = d, this.frames[a + 3] = e, this.frames[a + 4] = f
        }, apply: function (a, b, c) {
            var d = this.frames;
            if (!(b < d[0])) {
                var e = a.slots[this.slotIndex];
                if (b >= d[d.length - 5]) {
                    var g = d.length - 1;
                    return e.r = d[g - 3], e.g = d[g - 2], e.b = d[g - 1], e.a = d[g], void 0
                }
                var h = f.binarySearch(d, b, 5), i = d[h - 4], j = d[h - 3], k = d[h - 2], l = d[h - 1], m = d[h], n = 1 - (b - m) / (d[h - 5] - m);
                n = this.curves.getCurvePercent(h / 5 - 1, n);
                var o = i + (d[h + 1] - i) * n, p = j + (d[h + 2] - j) * n, q = k + (d[h + 3] - k) * n, r = l + (d[h + 4] - l) * n;
                1 > c ? (e.r += (o - e.r) * c, e.g += (p - e.g) * c, e.b += (q - e.b) * c, e.a += (r - e.a) * c) : (e.r = o, e.g = p, e.b = q, e.a = r)
            }
        }
    }, f.AttachmentTimeline = function (a) {
        this.curves = new f.Curves(a), this.frames = [], this.frames.length = a, this.attachmentNames = [], this.attachmentNames.length = a
    }, f.AttachmentTimeline.prototype = {
        slotIndex: 0, getFrameCount: function () {
            return this.frames.length
        }, setFrame: function (a, b, c) {
            this.frames[a] = b, this.attachmentNames[a] = c
        }, apply: function (a, b) {
            var c = this.frames;
            if (!(b < c[0])) {
                var d;
                d = b >= c[c.length - 1] ? c.length - 1 : f.binarySearch(c, b, 1) - 1;
                var e = this.attachmentNames[d];
                a.slots[this.slotIndex].setAttachment(e ? a.getAttachmentBySlotIndex(this.slotIndex, e) : null)
            }
        }
    }, f.SkeletonData = function () {
        this.bones = [], this.slots = [], this.skins = [], this.animations = []
    }, f.SkeletonData.prototype = {
        defaultSkin: null, findBone: function (a) {
            for (var b = this.bones, c = 0, d = b.length; d > c; c++)if (b[c].name == a)return b[c];
            return null
        }, findBoneIndex: function (a) {
            for (var b = this.bones, c = 0, d = b.length; d > c; c++)if (b[c].name == a)return c;
            return -1
        }, findSlot: function (a) {
            for (var b = this.slots, c = 0, d = b.length; d > c; c++)if (b[c].name == a)return slot[c];
            return null
        }, findSlotIndex: function (a) {
            for (var b = this.slots, c = 0, d = b.length; d > c; c++)if (b[c].name == a)return c;
            return -1
        }, findSkin: function (a) {
            for (var b = this.skins, c = 0, d = b.length; d > c; c++)if (b[c].name == a)return b[c];
            return null
        }, findAnimation: function (a) {
            for (var b = this.animations, c = 0, d = b.length; d > c; c++)if (b[c].name == a)return b[c];
            return null
        }
    }, f.Skeleton = function (a) {
        this.data = a, this.bones = [];
        for (var b = 0, c = a.bones.length; c > b; b++) {
            var d = a.bones[b], e = d.parent ? this.bones[a.bones.indexOf(d.parent)] : null;
            this.bones.push(new f.Bone(d, e))
        }
        for (this.slots = [], this.drawOrder = [], b = 0, c = a.slots.length; c > b; b++) {
            var g = a.slots[b], h = this.bones[a.bones.indexOf(g.boneData)], i = new f.Slot(g, this, h);
            this.slots.push(i), this.drawOrder.push(i)
        }
    }, f.Skeleton.prototype = {
        x: 0,
        y: 0,
        skin: null,
        r: 1,
        g: 1,
        b: 1,
        a: 1,
        time: 0,
        flipX: !1,
        flipY: !1,
        updateWorldTransform: function () {
            for (var a = this.flipX, b = this.flipY, c = this.bones, d = 0, e = c.length; e > d; d++)c[d].updateWorldTransform(a, b)
        },
        setToSetupPose: function () {
            this.setBonesToSetupPose(), this.setSlotsToSetupPose()
        },
        setBonesToSetupPose: function () {
            for (var a = this.bones, b = 0, c = a.length; c > b; b++)a[b].setToSetupPose()
        },
        setSlotsToSetupPose: function () {
            for (var a = this.slots, b = 0, c = a.length; c > b; b++)a[b].setToSetupPose(b)
        },
        getRootBone: function () {
            return this.bones.length ? this.bones[0] : null
        },
        findBone: function (a) {
            for (var b = this.bones, c = 0, d = b.length; d > c; c++)if (b[c].data.name == a)return b[c];
            return null
        },
        findBoneIndex: function (a) {
            for (var b = this.bones, c = 0, d = b.length; d > c; c++)if (b[c].data.name == a)return c;
            return -1
        },
        findSlot: function (a) {
            for (var b = this.slots, c = 0, d = b.length; d > c; c++)if (b[c].data.name == a)return b[c];
            return null
        },
        findSlotIndex: function (a) {
            for (var b = this.slots, c = 0, d = b.length; d > c; c++)if (b[c].data.name == a)return c;
            return -1
        },
        setSkinByName: function (a) {
            var b = this.data.findSkin(a);
            if (!b)throw"Skin not found: " + a;
            this.setSkin(b)
        },
        setSkin: function (a) {
            this.skin && a && a._attachAll(this, this.skin), this.skin = a
        },
        getAttachmentBySlotName: function (a, b) {
            return this.getAttachmentBySlotIndex(this.data.findSlotIndex(a), b)
        },
        getAttachmentBySlotIndex: function (a, b) {
            if (this.skin) {
                var c = this.skin.getAttachment(a, b);
                if (c)return c
            }
            return this.data.defaultSkin ? this.data.defaultSkin.getAttachment(a, b) : null
        },
        setAttachment: function (a, b) {
            for (var c = this.slots, d = 0, e = c.size; e > d; d++) {
                var f = c[d];
                if (f.data.name == a) {
                    var g = null;
                    if (b && (g = this.getAttachment(d, b), null == g))throw"Attachment not found: " + b + ", for slot: " + a;
                    return f.setAttachment(g), void 0
                }
            }
            throw"Slot not found: " + a
        },
        update: function (a) {
            time += a
        }
    }, f.AttachmentType = {region: 0}, f.RegionAttachment = function () {
        this.offset = [], this.offset.length = 8, this.uvs = [], this.uvs.length = 8
    }, f.RegionAttachment.prototype = {
        x: 0,
        y: 0,
        rotation: 0,
        scaleX: 1,
        scaleY: 1,
        width: 0,
        height: 0,
        rendererObject: null,
        regionOffsetX: 0,
        regionOffsetY: 0,
        regionWidth: 0,
        regionHeight: 0,
        regionOriginalWidth: 0,
        regionOriginalHeight: 0,
        setUVs: function (a, b, c, d, e) {
            var f = this.uvs;
            e ? (f[2] = a, f[3] = d, f[4] = a, f[5] = b, f[6] = c, f[7] = b, f[0] = c, f[1] = d) : (f[0] = a, f[1] = d, f[2] = a, f[3] = b, f[4] = c, f[5] = b, f[6] = c, f[7] = d)
        },
        updateOffset: function () {
            var a = this.width / this.regionOriginalWidth * this.scaleX, b = this.height / this.regionOriginalHeight * this.scaleY, c = -this.width / 2 * this.scaleX + this.regionOffsetX * a, d = -this.height / 2 * this.scaleY + this.regionOffsetY * b, e = c + this.regionWidth * a, f = d + this.regionHeight * b, g = this.rotation * Math.PI / 180, h = Math.cos(g), i = Math.sin(g), j = c * h + this.x, k = c * i, l = d * h + this.y, m = d * i, n = e * h + this.x, o = e * i, p = f * h + this.y, q = f * i, r = this.offset;
            r[0] = j - m, r[1] = l + k, r[2] = j - q, r[3] = p + k, r[4] = n - q, r[5] = p + o, r[6] = n - m, r[7] = l + o
        },
        computeVertices: function (a, b, c, d) {
            a += c.worldX, b += c.worldY;
            var e = c.m00, f = c.m01, g = c.m10, h = c.m11, i = this.offset;
            d[0] = i[0] * e + i[1] * f + a, d[1] = i[0] * g + i[1] * h + b, d[2] = i[2] * e + i[3] * f + a, d[3] = i[2] * g + i[3] * h + b, d[4] = i[4] * e + i[5] * f + a, d[5] = i[4] * g + i[5] * h + b, d[6] = i[6] * e + i[7] * f + a, d[7] = i[6] * g + i[7] * h + b
        }
    }, f.AnimationStateData = function (a) {
        this.skeletonData = a, this.animationToMixTime = {}
    }, f.AnimationStateData.prototype = {
        defaultMix: 0, setMixByName: function (a, b, c) {
            var d = this.skeletonData.findAnimation(a);
            if (!d)throw"Animation not found: " + a;
            var e = this.skeletonData.findAnimation(b);
            if (!e)throw"Animation not found: " + b;
            this.setMix(d, e, c)
        }, setMix: function (a, b, c) {
            this.animationToMixTime[a.name + ":" + b.name] = c
        }, getMix: function (a, b) {
            var c = this.animationToMixTime[a.name + ":" + b.name];
            return c ? c : this.defaultMix
        }
    }, f.AnimationState = function (a) {
        this.data = a, this.queue = []
    }, f.AnimationState.prototype = {
        animationSpeed: 1,
        current: null,
        previous: null,
        currentTime: 0,
        previousTime: 0,
        currentLoop: !1,
        previousLoop: !1,
        mixTime: 0,
        mixDuration: 0,
        update: function (a) {
            if (this.currentTime += a * this.animationSpeed, this.previousTime += a, this.mixTime += a, this.queue.length > 0) {
                var b = this.queue[0];
                this.currentTime >= b.delay && (this._setAnimation(b.animation, b.loop), this.queue.shift())
            }
        },
        apply: function (a) {
            if (this.current)if (this.previous) {
                this.previous.apply(a, this.previousTime, this.previousLoop);
                var b = this.mixTime / this.mixDuration;
                b >= 1 && (b = 1, this.previous = null), this.current.mix(a, this.currentTime, this.currentLoop, b)
            } else this.current.apply(a, this.currentTime, this.currentLoop)
        },
        clearAnimation: function () {
            this.previous = null, this.current = null, this.queue.length = 0
        },
        _setAnimation: function (a, b) {
            this.previous = null, a && this.current && (this.mixDuration = this.data.getMix(this.current, a), this.mixDuration > 0 && (this.mixTime = 0, this.previous = this.current, this.previousTime = this.currentTime, this.previousLoop = this.currentLoop)), this.current = a, this.currentLoop = b, this.currentTime = 0
        },
        setAnimationByName: function (a, b) {
            var c = this.data.skeletonData.findAnimation(a);
            if (!c)throw"Animation not found: " + a;
            this.setAnimation(c, b)
        },
        setAnimation: function (a, b) {
            this.queue.length = 0, this._setAnimation(a, b)
        },
        addAnimationByName: function (a, b, c) {
            var d = this.data.skeletonData.findAnimation(a);
            if (!d)throw"Animation not found: " + a;
            this.addAnimation(d, b, c)
        },
        addAnimation: function (a, b, c) {
            var d = {};
            if (d.animation = a, d.loop = b, !c || 0 >= c) {
                var e = this.queue.length ? this.queue[this.queue.length - 1].animation : this.current;
                c = null != e ? e.duration - this.data.getMix(e, a) + (c || 0) : 0
            }
            d.delay = c, this.queue.push(d)
        },
        isComplete: function () {
            return !this.current || this.currentTime >= this.current.duration
        }
    }, f.SkeletonJson = function (a) {
        this.attachmentLoader = a
    }, f.SkeletonJson.prototype = {
        scale: 1, readSkeletonData: function (a) {
            for (var b, c = new f.SkeletonData, d = a.bones, e = 0, g = d.length; g > e; e++) {
                var h = d[e], i = null;
                if (h.parent && (i = c.findBone(h.parent), !i))throw"Parent bone not found: " + h.parent;
                b = new f.BoneData(h.name, i), b.length = (h.length || 0) * this.scale, b.x = (h.x || 0) * this.scale, b.y = (h.y || 0) * this.scale, b.rotation = h.rotation || 0, b.scaleX = h.scaleX || 1, b.scaleY = h.scaleY || 1, c.bones.push(b)
            }
            var j = a.slots;
            for (e = 0, g = j.length; g > e; e++) {
                var k = j[e];
                if (b = c.findBone(k.bone), !b)throw"Slot bone not found: " + k.bone;
                var l = new f.SlotData(k.name, b), m = k.color;
                m && (l.r = f.SkeletonJson.toColor(m, 0), l.g = f.SkeletonJson.toColor(m, 1), l.b = f.SkeletonJson.toColor(m, 2), l.a = f.SkeletonJson.toColor(m, 3)), l.attachmentName = k.attachment, c.slots.push(l)
            }
            var n = a.skins;
            for (var o in n)if (n.hasOwnProperty(o)) {
                var p = n[o], q = new f.Skin(o);
                for (var r in p)if (p.hasOwnProperty(r)) {
                    var s = c.findSlotIndex(r), t = p[r];
                    for (var u in t)if (t.hasOwnProperty(u)) {
                        var v = this.readAttachment(q, u, t[u]);
                        null != v && q.addAttachment(s, u, v)
                    }
                }
                c.skins.push(q), "default" == q.name && (c.defaultSkin = q)
            }
            var w = a.animations;
            for (var x in w)w.hasOwnProperty(x) && this.readAnimation(x, w[x], c);
            return c
        }, readAttachment: function (a, b, c) {
            b = c.name || b;
            var d = f.AttachmentType[c.type || "region"];
            if (d == f.AttachmentType.region) {
                var e = new f.RegionAttachment;
                return e.x = (c.x || 0) * this.scale, e.y = (c.y || 0) * this.scale, e.scaleX = c.scaleX || 1, e.scaleY = c.scaleY || 1, e.rotation = c.rotation || 0, e.width = (c.width || 32) * this.scale, e.height = (c.height || 32) * this.scale, e.updateOffset(), e.rendererObject = {}, e.rendererObject.name = b, e.rendererObject.scale = {}, e.rendererObject.scale.x = e.scaleX, e.rendererObject.scale.y = e.scaleY, e.rendererObject.rotation = -e.rotation * Math.PI / 180, e
            }
            throw"Unknown attachment type: " + d
        }, readAnimation: function (a, b, c) {
            var d, e, g, h, i, j, k, l = [], m = 0, n = b.bones;
            for (var o in n)if (n.hasOwnProperty(o)) {
                var p = c.findBoneIndex(o);
                if (-1 == p)throw"Bone not found: " + o;
                var q = n[o];
                for (g in q)if (q.hasOwnProperty(g))if (i = q[g], "rotate" == g) {
                    for (e = new f.RotateTimeline(i.length), e.boneIndex = p, d = 0, j = 0, k = i.length; k > j; j++)h = i[j], e.setFrame(d, h.time, h.angle), f.SkeletonJson.readCurve(e, d, h), d++;
                    l.push(e), m = Math.max(m, e.frames[2 * e.getFrameCount() - 2])
                } else {
                    if ("translate" != g && "scale" != g)throw"Invalid timeline type for a bone: " + g + " (" + o + ")";
                    var r = 1;
                    for ("scale" == g ? e = new f.ScaleTimeline(i.length) : (e = new f.TranslateTimeline(i.length), r = this.scale), e.boneIndex = p, d = 0, j = 0, k = i.length; k > j; j++) {
                        h = i[j];
                        var s = (h.x || 0) * r, t = (h.y || 0) * r;
                        e.setFrame(d, h.time, s, t), f.SkeletonJson.readCurve(e, d, h), d++
                    }
                    l.push(e), m = Math.max(m, e.frames[3 * e.getFrameCount() - 3])
                }
            }
            var u = b.slots;
            for (var v in u)if (u.hasOwnProperty(v)) {
                var w = u[v], x = c.findSlotIndex(v);
                for (g in w)if (w.hasOwnProperty(g))if (i = w[g], "color" == g) {
                    for (e = new f.ColorTimeline(i.length), e.slotIndex = x, d = 0, j = 0, k = i.length; k > j; j++) {
                        h = i[j];
                        var y = h.color, z = f.SkeletonJson.toColor(y, 0), A = f.SkeletonJson.toColor(y, 1), B = f.SkeletonJson.toColor(y, 2), C = f.SkeletonJson.toColor(y, 3);
                        e.setFrame(d, h.time, z, A, B, C), f.SkeletonJson.readCurve(e, d, h), d++
                    }
                    l.push(e), m = Math.max(m, e.frames[5 * e.getFrameCount() - 5])
                } else {
                    if ("attachment" != g)throw"Invalid timeline type for a slot: " + g + " (" + v + ")";
                    for (e = new f.AttachmentTimeline(i.length), e.slotIndex = x, d = 0, j = 0, k = i.length; k > j; j++)h = i[j], e.setFrame(d++, h.time, h.name);
                    l.push(e), m = Math.max(m, e.frames[e.getFrameCount() - 1])
                }
            }
            c.animations.push(new f.Animation(a, l, m))
        }
    }, f.SkeletonJson.readCurve = function (a, b, c) {
        var d = c.curve;
        d && ("stepped" == d ? a.curves.setStepped(b) : d instanceof Array && a.curves.setCurve(b, d[0], d[1], d[2], d[3]))
    }, f.SkeletonJson.toColor = function (a, b) {
        if (8 != a.length)throw"Color hexidecimal length must be 8, recieved: " + a;
        return parseInt(a.substr(2 * b, 2), 16) / 255
    }, f.Atlas = function (a, b) {
        this.textureLoader = b, this.pages = [], this.regions = [];
        var c = new f.AtlasReader(a), d = [];
        d.length = 4;
        for (var e = null; ;) {
            var g = c.readLine();
            if (null == g)break;
            if (g = c.trim(g), g.length)if (e) {
                var h = new f.AtlasRegion;
                h.name = g, h.page = e, h.rotate = "true" == c.readValue(), c.readTuple(d);
                var i = parseInt(d[0], 10), j = parseInt(d[1], 10);
                c.readTuple(d);
                var k = parseInt(d[0], 10), l = parseInt(d[1], 10);
                h.u = i / e.width, h.v = j / e.height, h.rotate ? (h.u2 = (i + l) / e.width, h.v2 = (j + k) / e.height) : (h.u2 = (i + k) / e.width, h.v2 = (j + l) / e.height), h.x = i, h.y = j, h.width = Math.abs(k), h.height = Math.abs(l), 4 == c.readTuple(d) && (h.splits = [parseInt(d[0], 10), parseInt(d[1], 10), parseInt(d[2], 10), parseInt(d[3], 10)], 4 == c.readTuple(d) && (h.pads = [parseInt(d[0], 10), parseInt(d[1], 10), parseInt(d[2], 10), parseInt(d[3], 10)], c.readTuple(d))), h.originalWidth = parseInt(d[0], 10), h.originalHeight = parseInt(d[1], 10), c.readTuple(d), h.offsetX = parseInt(d[0], 10), h.offsetY = parseInt(d[1], 10), h.index = parseInt(c.readValue(), 10), this.regions.push(h)
            } else {
                e = new f.AtlasPage, e.name = g, e.format = f.Atlas.Format[c.readValue()], c.readTuple(d), e.minFilter = f.Atlas.TextureFilter[d[0]], e.magFilter = f.Atlas.TextureFilter[d[1]];
                var m = c.readValue();
                e.uWrap = f.Atlas.TextureWrap.clampToEdge, e.vWrap = f.Atlas.TextureWrap.clampToEdge, "x" == m ? e.uWrap = f.Atlas.TextureWrap.repeat : "y" == m ? e.vWrap = f.Atlas.TextureWrap.repeat : "xy" == m && (e.uWrap = e.vWrap = f.Atlas.TextureWrap.repeat), b.load(e, g), this.pages.push(e)
            } else e = null
        }
    }, f.Atlas.prototype = {
        findRegion: function (a) {
            for (var b = this.regions, c = 0, d = b.length; d > c; c++)if (b[c].name == a)return b[c];
            return null
        }, dispose: function () {
            for (var a = this.pages, b = 0, c = a.length; c > b; b++)this.textureLoader.unload(a[b].rendererObject)
        }, updateUVs: function (a) {
            for (var b = this.regions, c = 0, d = b.length; d > c; c++) {
                var e = b[c];
                e.page == a && (e.u = e.x / a.width, e.v = e.y / a.height, e.rotate ? (e.u2 = (e.x + e.height) / a.width, e.v2 = (e.y + e.width) / a.height) : (e.u2 = (e.x + e.width) / a.width, e.v2 = (e.y + e.height) / a.height))
            }
        }
    }, f.Atlas.Format = {
        alpha: 0,
        intensity: 1,
        luminanceAlpha: 2,
        rgb565: 3,
        rgba4444: 4,
        rgb888: 5,
        rgba8888: 6
    }, f.Atlas.TextureFilter = {
        nearest: 0,
        linear: 1,
        mipMap: 2,
        mipMapNearestNearest: 3,
        mipMapLinearNearest: 4,
        mipMapNearestLinear: 5,
        mipMapLinearLinear: 6
    }, f.Atlas.TextureWrap = {mirroredRepeat: 0, clampToEdge: 1, repeat: 2}, f.AtlasPage = function () {
    }, f.AtlasPage.prototype = {
        name: null,
        format: null,
        minFilter: null,
        magFilter: null,
        uWrap: null,
        vWrap: null,
        rendererObject: null,
        width: 0,
        height: 0
    }, f.AtlasRegion = function () {
    }, f.AtlasRegion.prototype = {
        page: null,
        name: null,
        x: 0,
        y: 0,
        width: 0,
        height: 0,
        u: 0,
        v: 0,
        u2: 0,
        v2: 0,
        offsetX: 0,
        offsetY: 0,
        originalWidth: 0,
        originalHeight: 0,
        index: 0,
        rotate: !1,
        splits: null,
        pads: null
    }, f.AtlasReader = function (a) {
        this.lines = a.split(/\r\n|\r|\n/)
    }, f.AtlasReader.prototype = {
        index: 0, trim: function (a) {
            return a.replace(/^\s+|\s+$/g, "")
        }, readLine: function () {
            return this.index >= this.lines.length ? null : this.lines[this.index++]
        }, readValue: function () {
            var a = this.readLine(), b = a.indexOf(":");
            if (-1 == b)throw"Invalid line: " + a;
            return this.trim(a.substring(b + 1))
        }, readTuple: function (a) {
            var b = this.readLine(), c = b.indexOf(":");
            if (-1 == c)throw"Invalid line: " + b;
            for (var d = 0, e = c + 1; 3 > d; d++) {
                var f = b.indexOf(",", e);
                if (-1 == f) {
                    if (!d)throw"Invalid line: " + b;
                    break
                }
                a[d] = this.trim(b.substr(e, f - e)), e = f + 1
            }
            return a[d] = this.trim(b.substring(e)), d + 1
        }
    }, f.AtlasAttachmentLoader = function (a) {
        this.atlas = a
    }, f.AtlasAttachmentLoader.prototype = {
        newAttachment: function (a, b, c) {
            switch (b) {
                case f.AttachmentType.region:
                    var d = this.atlas.findRegion(c);
                    if (!d)throw"Region not found in atlas: " + c + " (" + b + ")";
                    var e = new f.RegionAttachment(c);
                    return e.rendererObject = d, e.setUVs(d.u, d.v, d.u2, d.v2, d.rotate), e.regionOffsetX = d.offsetX, e.regionOffsetY = d.offsetY, e.regionWidth = d.width, e.regionHeight = d.height, e.regionOriginalWidth = d.originalWidth, e.regionOriginalHeight = d.originalHeight, e
            }
            throw"Unknown attachment type: " + b
        }
    }, f.Bone.yDown = !0, b.AnimCache = {}, b.Spine = function (a) {
        if (b.DisplayObjectContainer.call(this), this.spineData = b.AnimCache[a], !this.spineData)throw new Error("Spine data must be preloaded using PIXI.SpineLoader or PIXI.AssetLoader: " + a);
        this.skeleton = new f.Skeleton(this.spineData), this.skeleton.updateWorldTransform(), this.stateData = new f.AnimationStateData(this.spineData), this.state = new f.AnimationState(this.stateData), this.slotContainers = [];
        for (var c = 0, d = this.skeleton.drawOrder.length; d > c; c++) {
            var e = this.skeleton.drawOrder[c], g = e.attachment, h = new b.DisplayObjectContainer;
            if (this.slotContainers.push(h), this.addChild(h), g instanceof f.RegionAttachment) {
                var i = g.rendererObject.name, j = this.createSprite(e, g.rendererObject);
                e.currentSprite = j, e.currentSpriteName = i, h.addChild(j)
            }
        }
    }, b.Spine.prototype = Object.create(b.DisplayObjectContainer.prototype), b.Spine.prototype.constructor = b.Spine, b.Spine.prototype.updateTransform = function () {
        this.lastTime = this.lastTime || Date.now();
        var a = .001 * (Date.now() - this.lastTime);
        this.lastTime = Date.now(), this.state.update(a), this.state.apply(this.skeleton), this.skeleton.updateWorldTransform();
        for (var c = this.skeleton.drawOrder, d = 0, e = c.length; e > d; d++) {
            var g = c[d], h = g.attachment, i = this.slotContainers[d];
            if (h instanceof f.RegionAttachment) {
                if (h.rendererObject && (!g.currentSpriteName || g.currentSpriteName != h.name)) {
                    var j = h.rendererObject.name;
                    if (void 0 !== g.currentSprite && (g.currentSprite.visible = !1), g.sprites = g.sprites || {}, void 0 !== g.sprites[j])g.sprites[j].visible = !0; else {
                        var k = this.createSprite(g, h.rendererObject);
                        i.addChild(k)
                    }
                    g.currentSprite = g.sprites[j], g.currentSpriteName = j
                }
                i.visible = !0;
                var l = g.bone;
                i.position.x = l.worldX + h.x * l.m00 + h.y * l.m01, i.position.y = l.worldY + h.x * l.m10 + h.y * l.m11, i.scale.x = l.worldScaleX, i.scale.y = l.worldScaleY, i.rotation = -(g.bone.worldRotation * Math.PI / 180), i.alpha = g.a, g.currentSprite.tint = b.rgb2hex([g.r, g.g, g.b])
            } else i.visible = !1
        }
        b.DisplayObjectContainer.prototype.updateTransform.call(this)
    }, b.Spine.prototype.createSprite = function (a, c) {
        var d = b.TextureCache[c.name] ? c.name : c.name + ".png", e = new b.Sprite(b.Texture.fromFrame(d));
        return e.scale = c.scale, e.rotation = c.rotation, e.anchor.x = e.anchor.y = .5, a.sprites = a.sprites || {}, a.sprites[c.name] = e, e
    }, b.BaseTextureCache = {}, b.texturesToUpdate = [], b.texturesToDestroy = [], b.BaseTextureCacheIdGenerator = 0, b.BaseTexture = function (a, c) {
        if (b.EventTarget.call(this), this.width = 100, this.height = 100, this.scaleMode = c || b.scaleModes.DEFAULT, this.hasLoaded = !1, this.source = a, this.id = b.BaseTextureCacheIdGenerator++, this.premultipliedAlpha = !0, this._glTextures = [], this._dirty = [], a) {
            if ((this.source.complete || this.source.getContext) && this.source.width && this.source.height)this.hasLoaded = !0, this.width = this.source.width, this.height = this.source.height, b.texturesToUpdate.push(this); else {
                var d = this;
                this.source.onload = function () {
                    d.hasLoaded = !0, d.width = d.source.width, d.height = d.source.height;
                    for (var a = 0; a < d._glTextures.length; a++)d._dirty[a] = !0;
                    d.dispatchEvent({type: "loaded", content: d})
                }, this.source.onerror = function () {
                    d.dispatchEvent({type: "error", content: d})
                }
            }
            this.imageUrl = null, this._powerOf2 = !1
        }
    }, b.BaseTexture.prototype.constructor = b.BaseTexture, b.BaseTexture.prototype.destroy = function () {
        this.imageUrl ? (delete b.BaseTextureCache[this.imageUrl], delete b.TextureCache[this.imageUrl], this.imageUrl = null, this.source.src = null) : this.source && this.source._pixiId && delete b.BaseTextureCache[this.source._pixiId], this.source = null, b.texturesToDestroy.push(this)
    }, b.BaseTexture.prototype.updateSourceImage = function (a) {
        this.hasLoaded = !1, this.source.src = null, this.source.src = a
    }, b.BaseTexture.fromImage = function (a, c, d) {
        var e = b.BaseTextureCache[a];
        if (void 0 === c && -1 === a.indexOf("data:") && (c = !0), !e) {
            var f = new Image;
            c && (f.crossOrigin = ""), f.src = a, e = new b.BaseTexture(f, d), e.imageUrl = a, b.BaseTextureCache[a] = e
        }
        return e
    }, b.BaseTexture.fromCanvas = function (a, c) {
        a._pixiId || (a._pixiId = "canvas_" + b.TextureCacheIdGenerator++);
        var d = b.BaseTextureCache[a._pixiId];
        return d || (d = new b.BaseTexture(a, c), b.BaseTextureCache[a._pixiId] = d), d
    }, b.TextureCache = {}, b.FrameCache = {}, b.TextureCacheIdGenerator = 0, b.Texture = function (a, c) {
        if (b.EventTarget.call(this), this.noFrame = !1, c || (this.noFrame = !0, c = new b.Rectangle(0, 0, 1, 1)), a instanceof b.Texture && (a = a.baseTexture), this.baseTexture = a, this.frame = c, this.trim = null, this.valid = !1, this.scope = this, this._uvs = null, this.width = 0, this.height = 0, this.crop = new b.Rectangle(0, 0, 1, 1), a.hasLoaded)this.noFrame && (c = new b.Rectangle(0, 0, a.width, a.height)), this.setFrame(c); else {
            var d = this;
            a.addEventListener("loaded", function () {
                d.onBaseTextureLoaded()
            })
        }
    }, b.Texture.prototype.constructor = b.Texture, b.Texture.prototype.onBaseTextureLoaded = function () {
        var a = this.baseTexture;
        a.removeEventListener("loaded", this.onLoaded), this.noFrame && (this.frame = new b.Rectangle(0, 0, a.width, a.height)), this.setFrame(this.frame), this.scope.dispatchEvent({
            type: "update",
            content: this
        })
    }, b.Texture.prototype.destroy = function (a) {
        a && this.baseTexture.destroy(), this.valid = !1
    }, b.Texture.prototype.setFrame = function (a) {
        if (this.noFrame = !1, this.frame = a, this.width = a.width, this.height = a.height, this.crop.x = a.x, this.crop.y = a.y, this.crop.width = a.width, this.crop.height = a.height, !this.trim && (a.x + a.width > this.baseTexture.width || a.y + a.height > this.baseTexture.height))throw new Error("Texture Error: frame does not fit inside the base Texture dimensions " + this);
        this.valid = a && a.width && a.height && this.baseTexture.source && this.baseTexture.hasLoaded, this.trim && (this.width = this.trim.width, this.height = this.trim.height, this.frame.width = this.trim.width, this.frame.height = this.trim.height), this.valid && b.Texture.frameUpdates.push(this)
    }, b.Texture.prototype._updateWebGLuvs = function () {
        this._uvs || (this._uvs = new b.TextureUvs);
        var a = this.crop, c = this.baseTexture.width, d = this.baseTexture.height;
        this._uvs.x0 = a.x / c, this._uvs.y0 = a.y / d, this._uvs.x1 = (a.x + a.width) / c, this._uvs.y1 = a.y / d, this._uvs.x2 = (a.x + a.width) / c, this._uvs.y2 = (a.y + a.height) / d, this._uvs.x3 = a.x / c, this._uvs.y3 = (a.y + a.height) / d
    }, b.Texture.fromImage = function (a, c, d) {
        var e = b.TextureCache[a];
        return e || (e = new b.Texture(b.BaseTexture.fromImage(a, c, d)), b.TextureCache[a] = e), e
    }, b.Texture.fromFrame = function (a) {
        var c = b.TextureCache[a];
        if (!c)throw new Error('The frameId "' + a + '" does not exist in the texture cache ');
        return c
    }, b.Texture.fromCanvas = function (a, c) {
        var d = b.BaseTexture.fromCanvas(a, c);
        return new b.Texture(d)
    }, b.Texture.addTextureToCache = function (a, c) {
        b.TextureCache[c] = a
    }, b.Texture.removeTextureFromCache = function (a) {
        var c = b.TextureCache[a];
        return delete b.TextureCache[a], delete b.BaseTextureCache[a], c
    }, b.Texture.frameUpdates = [], b.TextureUvs = function () {
        this.x0 = 0, this.y0 = 0, this.x1 = 0, this.y1 = 0, this.x2 = 0, this.y2 = 0, this.x3 = 0, this.y3 = 0
    }, b.RenderTexture = function (a, c, d, e) {
        if (b.EventTarget.call(this), this.width = a || 100, this.height = c || 100, this.frame = new b.Rectangle(0, 0, this.width, this.height), this.crop = new b.Rectangle(0, 0, this.width, this.height), this.baseTexture = new b.BaseTexture, this.baseTexture.width = this.width, this.baseTexture.height = this.height, this.baseTexture._glTextures = [], this.baseTexture.scaleMode = e || b.scaleModes.DEFAULT, this.baseTexture.hasLoaded = !0, this.renderer = d || b.defaultRenderer, this.renderer.type === b.WEBGL_RENDERER) {
            var f = this.renderer.gl;
            this.textureBuffer = new b.FilterTexture(f, this.width, this.height, this.baseTexture.scaleMode), this.baseTexture._glTextures[f.id] = this.textureBuffer.texture, this.render = this.renderWebGL, this.projection = new b.Point(this.width / 2, -this.height / 2)
        } else this.render = this.renderCanvas, this.textureBuffer = new b.CanvasBuffer(this.width, this.height), this.baseTexture.source = this.textureBuffer.canvas;
        this.valid = !0, b.Texture.frameUpdates.push(this)
    }, b.RenderTexture.prototype = Object.create(b.Texture.prototype), b.RenderTexture.prototype.constructor = b.RenderTexture, b.RenderTexture.prototype.resize = function (a, c, d) {
        (a !== this.width || c !== this.height) && (this.width = this.frame.width = this.crop.width = a, this.height = this.frame.height = this.crop.height = c, d && (this.baseTexture.width = this.width, this.baseTexture.height = this.height), this.renderer.type === b.WEBGL_RENDERER && (this.projection.x = this.width / 2, this.projection.y = -this.height / 2), this.textureBuffer.resize(this.width, this.height))
    }, b.RenderTexture.prototype.clear = function () {
        this.renderer.type === b.WEBGL_RENDERER && this.renderer.gl.bindFramebuffer(this.renderer.gl.FRAMEBUFFER, this.textureBuffer.frameBuffer), this.textureBuffer.clear()
    }, b.RenderTexture.prototype.renderWebGL = function (a, c, d) {
        var e = this.renderer.gl;
        e.colorMask(!0, !0, !0, !0), e.viewport(0, 0, this.width, this.height), e.bindFramebuffer(e.FRAMEBUFFER, this.textureBuffer.frameBuffer), d && this.textureBuffer.clear();
        var f = a.children, g = a.worldTransform;
        a.worldTransform = b.RenderTexture.tempMatrix, a.worldTransform.d = -1, a.worldTransform.ty = -2 * this.projection.y, c && (a.worldTransform.tx = c.x, a.worldTransform.ty -= c.y);
        for (var h = 0, i = f.length; i > h; h++)f[h].updateTransform();
        b.WebGLRenderer.updateTextures(), this.renderer.spriteBatch.dirty = !0, this.renderer.renderDisplayObject(a, this.projection, this.textureBuffer.frameBuffer), a.worldTransform = g, this.renderer.spriteBatch.dirty = !0
    }, b.RenderTexture.prototype.renderCanvas = function (a, c, d) {
        var e = a.children, f = a.worldTransform;
        a.worldTransform = b.RenderTexture.tempMatrix, c ? (a.worldTransform.tx = c.x, a.worldTransform.ty = c.y) : (a.worldTransform.tx = 0, a.worldTransform.ty = 0);
        for (var g = 0, h = e.length; h > g; g++)e[g].updateTransform();
        d && this.textureBuffer.clear();
        var i = this.textureBuffer.context;
        this.renderer.renderDisplayObject(a, i), i.setTransform(1, 0, 0, 1, 0, 0), a.worldTransform = f
    }, b.RenderTexture.tempMatrix = new b.Matrix, b.AssetLoader = function (a, c) {
        b.EventTarget.call(this), this.assetURLs = a, this.crossorigin = c, this.loadersByType = {
            jpg: b.ImageLoader,
            jpeg: b.ImageLoader,
            png: b.ImageLoader,
            gif: b.ImageLoader,
            webp: b.ImageLoader,
            json: b.JsonLoader,
            atlas: b.AtlasLoader,
            anim: b.SpineLoader,
            xml: b.BitmapFontLoader,
            fnt: b.BitmapFontLoader
        }
    }, b.AssetLoader.prototype.constructor = b.AssetLoader, b.AssetLoader.prototype._getDataType = function (a) {
        var b = "data:", c = a.slice(0, b.length).toLowerCase();
        if (c === b) {
            var d = a.slice(b.length), e = d.indexOf(",");
            if (-1 === e)return null;
            var f = d.slice(0, e).split(";")[0];
            return f && "text/plain" !== f.toLowerCase() ? f.split("/").pop().toLowerCase() : "txt"
        }
        return null
    }, b.AssetLoader.prototype.load = function () {
        function a(a) {
            b.onAssetLoaded(a.content)
        }

        var b = this;
        this.loadCount = this.assetURLs.length;
        for (var c = 0; c < this.assetURLs.length; c++) {
            var d = this.assetURLs[c], e = this._getDataType(d);
            e || (e = d.split("?").shift().split(".").pop().toLowerCase());
            var f = this.loadersByType[e];
            if (!f)throw new Error(e + " is an unsupported file type");
            var g = new f(d, this.crossorigin);
            g.addEventListener("loaded", a), g.load()
        }
    }, b.AssetLoader.prototype.onAssetLoaded = function (a) {
        this.loadCount--, this.dispatchEvent({
            type: "onProgress",
            content: this,
            loader: a
        }), this.onProgress && this.onProgress(a), this.loadCount || (this.dispatchEvent({
            type: "onComplete",
            content: this
        }), this.onComplete && this.onComplete())
    },b.JsonLoader = function (a, c) {
        b.EventTarget.call(this), this.url = a, this.crossorigin = c, this.baseUrl = a.replace(/[^\/]*$/, ""), this.loaded = !1
    },b.JsonLoader.prototype.constructor = b.JsonLoader,b.JsonLoader.prototype.load = function () {
        var a = this;
        window.XDomainRequest && a.crossorigin ? (this.ajaxRequest = new window.XDomainRequest, this.ajaxRequest.timeout = 3e3, this.ajaxRequest.onerror = function () {
            a.onError()
        }, this.ajaxRequest.ontimeout = function () {
            a.onError()
        }, this.ajaxRequest.onprogress = function () {
        }) : this.ajaxRequest = window.XMLHttpRequest ? new window.XMLHttpRequest : new window.ActiveXObject("Microsoft.XMLHTTP"), this.ajaxRequest.onload = function () {
            a.onJSONLoaded()
        }, this.ajaxRequest.open("GET", this.url, !0), this.ajaxRequest.send()
    },b.JsonLoader.prototype.onJSONLoaded = function () {
        if (!this.ajaxRequest.responseText)return this.onError(), void 0;
        if (this.json = JSON.parse(this.ajaxRequest.responseText), this.json.frames) {
            var a = this, c = this.baseUrl + this.json.meta.image, d = new b.ImageLoader(c, this.crossorigin), e = this.json.frames;
            this.texture = d.texture.baseTexture, d.addEventListener("loaded", function () {
                a.onLoaded()
            });
            for (var g in e) {
                var h = e[g].frame;
                if (h && (b.TextureCache[g] = new b.Texture(this.texture, {
                        x: h.x,
                        y: h.y,
                        width: h.w,
                        height: h.h
                    }), b.TextureCache[g].crop = new b.Rectangle(h.x, h.y, h.w, h.h), e[g].trimmed)) {
                    var i = e[g].sourceSize, j = e[g].spriteSourceSize;
                    b.TextureCache[g].trim = new b.Rectangle(j.x, j.y, i.w, i.h)
                }
            }
            d.load()
        } else if (this.json.bones) {
            var k = new f.SkeletonJson, l = k.readSkeletonData(this.json);
            b.AnimCache[this.url] = l, this.onLoaded()
        } else this.onLoaded()
    },b.JsonLoader.prototype.onLoaded = function () {
        this.loaded = !0, this.dispatchEvent({type: "loaded", content: this})
    },b.JsonLoader.prototype.onError = function () {
        this.dispatchEvent({type: "error", content: this})
    },b.AtlasLoader = function (a, c) {
        b.EventTarget.call(this), this.url = a, this.baseUrl = a.replace(/[^\/]*$/, ""), this.crossorigin = c, this.loaded = !1
    },b.AtlasLoader.constructor = b.AtlasLoader,b.AtlasLoader.prototype.load = function () {
        this.ajaxRequest = new b.AjaxRequest, this.ajaxRequest.onreadystatechange = this.onAtlasLoaded.bind(this), this.ajaxRequest.open("GET", this.url, !0), this.ajaxRequest.overrideMimeType && this.ajaxRequest.overrideMimeType("application/json"), this.ajaxRequest.send(null)
    },b.AtlasLoader.prototype.onAtlasLoaded = function () {
        if (4 === this.ajaxRequest.readyState)if (200 === this.ajaxRequest.status || -1 === window.location.href.indexOf("http")) {
            this.atlas = {meta: {image: []}, frames: []};
            var a = this.ajaxRequest.responseText.split(/\r?\n/), c = -3, d = 0, e = null, f = !1, g = 0, h = 0, i = this.onLoaded.bind(this);
            for (g = 0; g < a.length; g++)if (a[g] = a[g].replace(/^\s+|\s+$/g, ""), "" === a[g] && (f = g + 1), a[g].length > 0) {
                if (f === g)this.atlas.meta.image.push(a[g]), d = this.atlas.meta.image.length - 1, this.atlas.frames.push({}), c = -3; else if (c > 0)if (c % 7 === 1)null != e && (this.atlas.frames[d][e.name] = e), e = {
                    name: a[g],
                    frame: {}
                }; else {
                    var j = a[g].split(" ");
                    if (c % 7 === 3)e.frame.x = Number(j[1].replace(",", "")), e.frame.y = Number(j[2]); else if (c % 7 === 4)e.frame.w = Number(j[1].replace(",", "")), e.frame.h = Number(j[2]); else if (c % 7 === 5) {
                        var k = {x: 0, y: 0, w: Number(j[1].replace(",", "")), h: Number(j[2])};
                        k.w > e.frame.w || k.h > e.frame.h ? (e.trimmed = !0, e.realSize = k) : e.trimmed = !1
                    }
                }
                c++
            }
            if (null != e && (this.atlas.frames[d][e.name] = e), this.atlas.meta.image.length > 0) {
                for (this.images = [], h = 0; h < this.atlas.meta.image.length; h++) {
                    var l = this.baseUrl + this.atlas.meta.image[h], m = this.atlas.frames[h];
                    this.images.push(new b.ImageLoader(l, this.crossorigin));
                    for (g in m) {
                        var n = m[g].frame;
                        n && (b.TextureCache[g] = new b.Texture(this.images[h].texture.baseTexture, {
                            x: n.x,
                            y: n.y,
                            width: n.w,
                            height: n.h
                        }), m[g].trimmed && (b.TextureCache[g].realSize = m[g].realSize, b.TextureCache[g].trim.x = 0, b.TextureCache[g].trim.y = 0))
                    }
                }
                for (this.currentImageId = 0, h = 0; h < this.images.length; h++)this.images[h].addEventListener("loaded", i);
                this.images[this.currentImageId].load()
            } else this.onLoaded()
        } else this.onError()
    },b.AtlasLoader.prototype.onLoaded = function () {
        this.images.length - 1 > this.currentImageId ? (this.currentImageId++, this.images[this.currentImageId].load()) : (this.loaded = !0, this.dispatchEvent({
            type: "loaded",
            content: this
        }))
    },b.AtlasLoader.prototype.onError = function () {
        this.dispatchEvent({type: "error", content: this})
    },b.SpriteSheetLoader = function (a, c) {
        b.EventTarget.call(this), this.url = a, this.crossorigin = c, this.baseUrl = a.replace(/[^\/]*$/, ""), this.texture = null, this.frames = {}
    },b.SpriteSheetLoader.prototype.constructor = b.SpriteSheetLoader,b.SpriteSheetLoader.prototype.load = function () {
        var a = this, c = new b.JsonLoader(this.url, this.crossorigin);
        c.addEventListener("loaded", function (b) {
            a.json = b.content.json, a.onLoaded()
        }), c.load()
    },b.SpriteSheetLoader.prototype.onLoaded = function () {
        this.dispatchEvent({type: "loaded", content: this})
    },b.ImageLoader = function (a, c) {
        b.EventTarget.call(this), this.texture = b.Texture.fromImage(a, c), this.frames = []
    },b.ImageLoader.prototype.constructor = b.ImageLoader,b.ImageLoader.prototype.load = function () {
        if (this.texture.baseTexture.hasLoaded)this.onLoaded(); else {
            var a = this;
            this.texture.baseTexture.addEventListener("loaded", function () {
                a.onLoaded()
            })
        }
    },b.ImageLoader.prototype.onLoaded = function () {
        this.dispatchEvent({type: "loaded", content: this})
    },b.ImageLoader.prototype.loadFramedSpriteSheet = function (a, c, d) {
        this.frames = [];
        for (var e = Math.floor(this.texture.width / a), f = Math.floor(this.texture.height / c), g = 0, h = 0; f > h; h++)for (var i = 0; e > i; i++, g++) {
            var j = new b.Texture(this.texture, {x: i * a, y: h * c, width: a, height: c});
            this.frames.push(j), d && (b.TextureCache[d + "-" + g] = j)
        }
        if (this.texture.baseTexture.hasLoaded)this.onLoaded(); else {
            var k = this;
            this.texture.baseTexture.addEventListener("loaded", function () {
                k.onLoaded()
            })
        }
    },b.BitmapFontLoader = function (a, c) {
        b.EventTarget.call(this), this.url = a, this.crossorigin = c, this.baseUrl = a.replace(/[^\/]*$/, ""), this.texture = null
    },b.BitmapFontLoader.prototype.constructor = b.BitmapFontLoader,b.BitmapFontLoader.prototype.load = function () {
        this.ajaxRequest = new b.AjaxRequest;
        var a = this;
        this.ajaxRequest.onreadystatechange = function () {
            a.onXMLLoaded()
        }, this.ajaxRequest.open("GET", this.url, !0), this.ajaxRequest.overrideMimeType && this.ajaxRequest.overrideMimeType("application/xml"), this.ajaxRequest.send(null)
    },b.BitmapFontLoader.prototype.onXMLLoaded = function () {
        if (4 === this.ajaxRequest.readyState && (200 === this.ajaxRequest.status || -1 === window.location.protocol.indexOf("http"))) {
            var a = this.ajaxRequest.responseXML;
            if (!a || /MSIE 9/i.test(navigator.userAgent) || navigator.isCocoonJS)if ("function" == typeof window.DOMParser) {
                var c = new DOMParser;
                a = c.parseFromString(this.ajaxRequest.responseText, "text/xml")
            } else {
                var d = document.createElement("div");
                d.innerHTML = this.ajaxRequest.responseText, a = d
            }
            var e = this.baseUrl + a.getElementsByTagName("page")[0].getAttribute("file"), f = new b.ImageLoader(e, this.crossorigin);
            this.texture = f.texture.baseTexture;
            var g = {}, h = a.getElementsByTagName("info")[0], i = a.getElementsByTagName("common")[0];
            g.font = h.getAttribute("face"), g.size = parseInt(h.getAttribute("size"), 10), g.lineHeight = parseInt(i.getAttribute("lineHeight"), 10), g.chars = {};
            for (var j = a.getElementsByTagName("char"), k = 0; k < j.length; k++) {
                var l = parseInt(j[k].getAttribute("id"), 10), m = new b.Rectangle(parseInt(j[k].getAttribute("x"), 10), parseInt(j[k].getAttribute("y"), 10), parseInt(j[k].getAttribute("width"), 10), parseInt(j[k].getAttribute("height"), 10));
                g.chars[l] = {
                    xOffset: parseInt(j[k].getAttribute("xoffset"), 10),
                    yOffset: parseInt(j[k].getAttribute("yoffset"), 10),
                    xAdvance: parseInt(j[k].getAttribute("xadvance"), 10),
                    kerning: {},
                    texture: b.TextureCache[l] = new b.Texture(this.texture, m)
                }
            }
            var n = a.getElementsByTagName("kerning");
            for (k = 0; k < n.length; k++) {
                var o = parseInt(n[k].getAttribute("first"), 10), p = parseInt(n[k].getAttribute("second"), 10), q = parseInt(n[k].getAttribute("amount"), 10);
                g.chars[p].kerning[o] = q
            }
            b.BitmapText.fonts[g.font] = g;
            var r = this;
            f.addEventListener("loaded", function () {
                r.onLoaded()
            }), f.load()
        }
    },b.BitmapFontLoader.prototype.onLoaded = function () {
        this.dispatchEvent({type: "loaded", content: this})
    },b.SpineLoader = function (a, c) {
        b.EventTarget.call(this), this.url = a, this.crossorigin = c, this.loaded = !1
    },b.SpineLoader.prototype.constructor = b.SpineLoader,b.SpineLoader.prototype.load = function () {
        var a = this, c = new b.JsonLoader(this.url, this.crossorigin);
        c.addEventListener("loaded", function (b) {
            a.json = b.content.json, a.onLoaded()
        }), c.load()
    },b.SpineLoader.prototype.onLoaded = function () {
        this.loaded = !0, this.dispatchEvent({type: "loaded", content: this})
    },b.AbstractFilter = function (a, b) {
        this.passes = [this], this.shaders = [], this.dirty = !0, this.padding = 0, this.uniforms = b || {}, this.fragmentSrc = a || []
    },b.AlphaMaskFilter = function (a) {
        b.AbstractFilter.call(this), this.passes = [this], a.baseTexture._powerOf2 = !0, this.uniforms = {
            mask: {
                type: "sampler2D",
                value: a
            }, mapDimensions: {type: "2f", value: {x: 1, y: 5112}}, dimensions: {type: "4fv", value: [0, 0, 0, 0]}
        }, a.baseTexture.hasLoaded ? (this.uniforms.mask.value.x = a.width, this.uniforms.mask.value.y = a.height) : (this.boundLoadedFunction = this.onTextureLoaded.bind(this), a.baseTexture.on("loaded", this.boundLoadedFunction)), this.fragmentSrc = ["precision mediump float;", "varying vec2 vTextureCoord;", "varying vec4 vColor;", "uniform sampler2D mask;", "uniform sampler2D uSampler;", "uniform vec2 offset;", "uniform vec4 dimensions;", "uniform vec2 mapDimensions;", "void main(void) {", "   vec2 mapCords = vTextureCoord.xy;", "   mapCords += (dimensions.zw + offset)/ dimensions.xy ;", "   mapCords.y *= -1.0;", "   mapCords.y += 1.0;", "   mapCords *= dimensions.xy / mapDimensions;", "   vec4 original =  texture2D(uSampler, vTextureCoord);", "   float maskAlpha =  texture2D(mask, mapCords).r;", "   original *= maskAlpha;", "   gl_FragColor =  original;", "}"]
    },b.AlphaMaskFilter.prototype = Object.create(b.AbstractFilter.prototype),b.AlphaMaskFilter.prototype.constructor = b.AlphaMaskFilter,b.AlphaMaskFilter.prototype.onTextureLoaded = function () {
        this.uniforms.mapDimensions.value.x = this.uniforms.mask.value.width, this.uniforms.mapDimensions.value.y = this.uniforms.mask.value.height, this.uniforms.mask.value.baseTexture.off("loaded", this.boundLoadedFunction)
    },Object.defineProperty(b.AlphaMaskFilter.prototype, "map", {
        get: function () {
            return this.uniforms.mask.value
        }, set: function (a) {
            this.uniforms.mask.value = a
        }
    }),b.ColorMatrixFilter = function () {
        b.AbstractFilter.call(this), this.passes = [this], this.uniforms = {
            matrix: {
                type: "mat4",
                value: [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1]
            }
        }, this.fragmentSrc = ["precision mediump float;", "varying vec2 vTextureCoord;", "varying vec4 vColor;", "uniform float invert;", "uniform mat4 matrix;", "uniform sampler2D uSampler;", "void main(void) {", "   gl_FragColor = texture2D(uSampler, vTextureCoord) * matrix;", "}"]
    },b.ColorMatrixFilter.prototype = Object.create(b.AbstractFilter.prototype),b.ColorMatrixFilter.prototype.constructor = b.ColorMatrixFilter,Object.defineProperty(b.ColorMatrixFilter.prototype, "matrix", {
        get: function () {
            return this.uniforms.matrix.value
        }, set: function (a) {
            this.uniforms.matrix.value = a
        }
    }),b.GrayFilter = function () {
        b.AbstractFilter.call(this), this.passes = [this], this.uniforms = {
            gray: {
                type: "1f",
                value: 1
            }
        }, this.fragmentSrc = ["precision mediump float;", "varying vec2 vTextureCoord;", "varying vec4 vColor;", "uniform sampler2D uSampler;", "uniform float gray;", "void main(void) {", "   gl_FragColor = texture2D(uSampler, vTextureCoord);", "   gl_FragColor.rgb = mix(gl_FragColor.rgb, vec3(0.2126*gl_FragColor.r + 0.7152*gl_FragColor.g + 0.0722*gl_FragColor.b), gray);", "}"]
    },b.GrayFilter.prototype = Object.create(b.AbstractFilter.prototype),b.GrayFilter.prototype.constructor = b.GrayFilter,Object.defineProperty(b.GrayFilter.prototype, "gray", {
        get: function () {
            return this.uniforms.gray.value
        }, set: function (a) {
            this.uniforms.gray.value = a
        }
    }),b.DisplacementFilter = function (a) {
        b.AbstractFilter.call(this), this.passes = [this], a.baseTexture._powerOf2 = !0, this.uniforms = {
            displacementMap: {
                type: "sampler2D",
                value: a
            },
            scale: {type: "2f", value: {x: 30, y: 30}},
            offset: {type: "2f", value: {x: 0, y: 0}},
            mapDimensions: {type: "2f", value: {x: 1, y: 5112}},
            dimensions: {type: "4fv", value: [0, 0, 0, 0]}
        }, a.baseTexture.hasLoaded ? (this.uniforms.mapDimensions.value.x = a.width, this.uniforms.mapDimensions.value.y = a.height) : (this.boundLoadedFunction = this.onTextureLoaded.bind(this), a.baseTexture.on("loaded", this.boundLoadedFunction)), this.fragmentSrc = ["precision mediump float;", "varying vec2 vTextureCoord;", "varying vec4 vColor;", "uniform sampler2D displacementMap;", "uniform sampler2D uSampler;", "uniform vec2 scale;", "uniform vec2 offset;", "uniform vec4 dimensions;", "uniform vec2 mapDimensions;", "void main(void) {", "   vec2 mapCords = vTextureCoord.xy;", "   mapCords += (dimensions.zw + offset)/ dimensions.xy ;", "   mapCords.y *= -1.0;", "   mapCords.y += 1.0;", "   vec2 matSample = texture2D(displacementMap, mapCords).xy;", "   matSample -= 0.5;", "   matSample *= scale;", "   matSample /= mapDimensions;", "   gl_FragColor = texture2D(uSampler, vec2(vTextureCoord.x + matSample.x, vTextureCoord.y + matSample.y));", "   gl_FragColor.rgb = mix( gl_FragColor.rgb, gl_FragColor.rgb, 1.0);", "   vec2 cord = vTextureCoord;", "}"]
    },b.DisplacementFilter.prototype = Object.create(b.AbstractFilter.prototype),b.DisplacementFilter.prototype.constructor = b.DisplacementFilter,b.DisplacementFilter.prototype.onTextureLoaded = function () {
        this.uniforms.mapDimensions.value.x = this.uniforms.displacementMap.value.width, this.uniforms.mapDimensions.value.y = this.uniforms.displacementMap.value.height, this.uniforms.displacementMap.value.baseTexture.off("loaded", this.boundLoadedFunction)
    },Object.defineProperty(b.DisplacementFilter.prototype, "map", {
        get: function () {
            return this.uniforms.displacementMap.value
        }, set: function (a) {
            this.uniforms.displacementMap.value = a
        }
    }),Object.defineProperty(b.DisplacementFilter.prototype, "scale", {
        get: function () {
            return this.uniforms.scale.value
        }, set: function (a) {
            this.uniforms.scale.value = a
        }
    }),Object.defineProperty(b.DisplacementFilter.prototype, "offset", {
        get: function () {
            return this.uniforms.offset.value
        }, set: function (a) {
            this.uniforms.offset.value = a
        }
    }),b.PixelateFilter = function () {
        b.AbstractFilter.call(this), this.passes = [this], this.uniforms = {
            invert: {type: "1f", value: 0},
            dimensions: {type: "4fv", value: new Float32Array([1e4, 100, 10, 10])},
            pixelSize: {type: "2f", value: {x: 10, y: 10}}
        }, this.fragmentSrc = ["precision mediump float;", "varying vec2 vTextureCoord;", "varying vec4 vColor;", "uniform vec2 testDim;", "uniform vec4 dimensions;", "uniform vec2 pixelSize;", "uniform sampler2D uSampler;", "void main(void) {", "   vec2 coord = vTextureCoord;", "   vec2 size = dimensions.xy/pixelSize;", "   vec2 color = floor( ( vTextureCoord * size ) ) / size + pixelSize/dimensions.xy * 0.5;", "   gl_FragColor = texture2D(uSampler, color);", "}"]
    },b.PixelateFilter.prototype = Object.create(b.AbstractFilter.prototype),b.PixelateFilter.prototype.constructor = b.PixelateFilter,Object.defineProperty(b.PixelateFilter.prototype, "size", {
        get: function () {
            return this.uniforms.pixelSize.value
        }, set: function (a) {
            this.dirty = !0, this.uniforms.pixelSize.value = a
        }
    }),b.BlurXFilter = function () {
        b.AbstractFilter.call(this), this.passes = [this], this.uniforms = {
            blur: {
                type: "1f",
                value: 1 / 512
            }
        }, this.fragmentSrc = ["precision mediump float;", "varying vec2 vTextureCoord;", "varying vec4 vColor;", "uniform float blur;", "uniform sampler2D uSampler;", "void main(void) {", "   vec4 sum = vec4(0.0);", "   sum += texture2D(uSampler, vec2(vTextureCoord.x - 4.0*blur, vTextureCoord.y)) * 0.05;", "   sum += texture2D(uSampler, vec2(vTextureCoord.x - 3.0*blur, vTextureCoord.y)) * 0.09;", "   sum += texture2D(uSampler, vec2(vTextureCoord.x - 2.0*blur, vTextureCoord.y)) * 0.12;", "   sum += texture2D(uSampler, vec2(vTextureCoord.x - blur, vTextureCoord.y)) * 0.15;", "   sum += texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y)) * 0.16;", "   sum += texture2D(uSampler, vec2(vTextureCoord.x + blur, vTextureCoord.y)) * 0.15;", "   sum += texture2D(uSampler, vec2(vTextureCoord.x + 2.0*blur, vTextureCoord.y)) * 0.12;", "   sum += texture2D(uSampler, vec2(vTextureCoord.x + 3.0*blur, vTextureCoord.y)) * 0.09;", "   sum += texture2D(uSampler, vec2(vTextureCoord.x + 4.0*blur, vTextureCoord.y)) * 0.05;", "   gl_FragColor = sum;", "}"]
    },b.BlurXFilter.prototype = Object.create(b.AbstractFilter.prototype),b.BlurXFilter.prototype.constructor = b.BlurXFilter,Object.defineProperty(b.BlurXFilter.prototype, "blur", {
        get: function () {
            return this.uniforms.blur.value / (1 / 7e3)
        }, set: function (a) {
            this.dirty = !0, this.uniforms.blur.value = 1 / 7e3 * a
        }
    }),b.BlurYFilter = function () {
        b.AbstractFilter.call(this), this.passes = [this], this.uniforms = {
            blur: {
                type: "1f",
                value: 1 / 512
            }
        }, this.fragmentSrc = ["precision mediump float;", "varying vec2 vTextureCoord;", "varying vec4 vColor;", "uniform float blur;", "uniform sampler2D uSampler;", "void main(void) {", "   vec4 sum = vec4(0.0);", "   sum += texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y - 4.0*blur)) * 0.05;", "   sum += texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y - 3.0*blur)) * 0.09;", "   sum += texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y - 2.0*blur)) * 0.12;", "   sum += texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y - blur)) * 0.15;", "   sum += texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y)) * 0.16;", "   sum += texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y + blur)) * 0.15;", "   sum += texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y + 2.0*blur)) * 0.12;", "   sum += texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y + 3.0*blur)) * 0.09;", "   sum += texture2D(uSampler, vec2(vTextureCoord.x, vTextureCoord.y + 4.0*blur)) * 0.05;", "   gl_FragColor = sum;", "}"]
    },b.BlurYFilter.prototype = Object.create(b.AbstractFilter.prototype),b.BlurYFilter.prototype.constructor = b.BlurYFilter,Object.defineProperty(b.BlurYFilter.prototype, "blur", {
        get: function () {
            return this.uniforms.blur.value / (1 / 7e3)
        }, set: function (a) {
            this.uniforms.blur.value = 1 / 7e3 * a
        }
    }),b.BlurFilter = function () {
        this.blurXFilter = new b.BlurXFilter, this.blurYFilter = new b.BlurYFilter, this.passes = [this.blurXFilter, this.blurYFilter]
    },Object.defineProperty(b.BlurFilter.prototype, "blur", {
        get: function () {
            return this.blurXFilter.blur
        }, set: function (a) {
            this.blurXFilter.blur = this.blurYFilter.blur = a
        }
    }),Object.defineProperty(b.BlurFilter.prototype, "blurX", {
        get: function () {
            return this.blurXFilter.blur
        }, set: function (a) {
            this.blurXFilter.blur = a
        }
    }),Object.defineProperty(b.BlurFilter.prototype, "blurY", {
        get: function () {
            return this.blurYFilter.blur
        }, set: function (a) {
            this.blurYFilter.blur = a
        }
    }),b.InvertFilter = function () {
        b.AbstractFilter.call(this), this.passes = [this], this.uniforms = {
            invert: {
                type: "1f",
                value: 1
            }
        }, this.fragmentSrc = ["precision mediump float;", "varying vec2 vTextureCoord;", "varying vec4 vColor;", "uniform float invert;", "uniform sampler2D uSampler;", "void main(void) {", "   gl_FragColor = texture2D(uSampler, vTextureCoord);", "   gl_FragColor.rgb = mix( (vec3(1)-gl_FragColor.rgb) * gl_FragColor.a, gl_FragColor.rgb, 1.0 - invert);", "}"]
    },b.InvertFilter.prototype = Object.create(b.AbstractFilter.prototype),b.InvertFilter.prototype.constructor = b.InvertFilter,Object.defineProperty(b.InvertFilter.prototype, "invert", {
        get: function () {
            return this.uniforms.invert.value
        }, set: function (a) {
            this.uniforms.invert.value = a
        }
    }),b.SepiaFilter = function () {
        b.AbstractFilter.call(this), this.passes = [this], this.uniforms = {
            sepia: {
                type: "1f",
                value: 1
            }
        }, this.fragmentSrc = ["precision mediump float;", "varying vec2 vTextureCoord;", "varying vec4 vColor;", "uniform float sepia;", "uniform sampler2D uSampler;", "const mat3 sepiaMatrix = mat3(0.3588, 0.7044, 0.1368, 0.2990, 0.5870, 0.1140, 0.2392, 0.4696, 0.0912);", "void main(void) {", "   gl_FragColor = texture2D(uSampler, vTextureCoord);", "   gl_FragColor.rgb = mix( gl_FragColor.rgb, gl_FragColor.rgb * sepiaMatrix, sepia);", "}"]
    },b.SepiaFilter.prototype = Object.create(b.AbstractFilter.prototype),b.SepiaFilter.prototype.constructor = b.SepiaFilter,Object.defineProperty(b.SepiaFilter.prototype, "sepia", {
        get: function () {
            return this.uniforms.sepia.value
        }, set: function (a) {
            this.uniforms.sepia.value = a
        }
    }),b.TwistFilter = function () {
        b.AbstractFilter.call(this), this.passes = [this], this.uniforms = {
            radius: {type: "1f", value: .5},
            angle: {type: "1f", value: 5},
            offset: {type: "2f", value: {x: .5, y: .5}}
        }, this.fragmentSrc = ["precision mediump float;", "varying vec2 vTextureCoord;", "varying vec4 vColor;", "uniform vec4 dimensions;", "uniform sampler2D uSampler;", "uniform float radius;", "uniform float angle;", "uniform vec2 offset;", "void main(void) {", "   vec2 coord = vTextureCoord - offset;", "   float distance = length(coord);", "   if (distance < radius) {", "       float ratio = (radius - distance) / radius;", "       float angleMod = ratio * ratio * angle;", "       float s = sin(angleMod);", "       float c = cos(angleMod);", "       coord = vec2(coord.x * c - coord.y * s, coord.x * s + coord.y * c);", "   }", "   gl_FragColor = texture2D(uSampler, coord+offset);", "}"]
    },b.TwistFilter.prototype = Object.create(b.AbstractFilter.prototype),b.TwistFilter.prototype.constructor = b.TwistFilter,Object.defineProperty(b.TwistFilter.prototype, "offset", {
        get: function () {
            return this.uniforms.offset.value
        }, set: function (a) {
            this.dirty = !0, this.uniforms.offset.value = a
        }
    }),Object.defineProperty(b.TwistFilter.prototype, "radius", {
        get: function () {
            return this.uniforms.radius.value
        }, set: function (a) {
            this.dirty = !0, this.uniforms.radius.value = a
        }
    }),Object.defineProperty(b.TwistFilter.prototype, "angle", {
        get: function () {
            return this.uniforms.angle.value
        }, set: function (a) {
            this.dirty = !0, this.uniforms.angle.value = a
        }
    }),b.ColorStepFilter = function () {
        b.AbstractFilter.call(this), this.passes = [this], this.uniforms = {
            step: {
                type: "1f",
                value: 5
            }
        }, this.fragmentSrc = ["precision mediump float;", "varying vec2 vTextureCoord;", "varying vec4 vColor;", "uniform sampler2D uSampler;", "uniform float step;", "void main(void) {", "   vec4 color = texture2D(uSampler, vTextureCoord);", "   color = floor(color * step) / step;", "   gl_FragColor = color;", "}"]
    },b.ColorStepFilter.prototype = Object.create(b.AbstractFilter.prototype),b.ColorStepFilter.prototype.constructor = b.ColorStepFilter,Object.defineProperty(b.ColorStepFilter.prototype, "step", {
        get: function () {
            return this.uniforms.step.value
        }, set: function (a) {
            this.uniforms.step.value = a
        }
    }),b.DotScreenFilter = function () {
        b.AbstractFilter.call(this), this.passes = [this], this.uniforms = {
            scale: {type: "1f", value: 1},
            angle: {type: "1f", value: 5},
            dimensions: {type: "4fv", value: [0, 0, 0, 0]}
        }, this.fragmentSrc = ["precision mediump float;", "varying vec2 vTextureCoord;", "varying vec4 vColor;", "uniform vec4 dimensions;", "uniform sampler2D uSampler;", "uniform float angle;", "uniform float scale;", "float pattern() {", "   float s = sin(angle), c = cos(angle);", "   vec2 tex = vTextureCoord * dimensions.xy;", "   vec2 point = vec2(", "       c * tex.x - s * tex.y,", "       s * tex.x + c * tex.y", "   ) * scale;", "   return (sin(point.x) * sin(point.y)) * 4.0;", "}", "void main() {", "   vec4 color = texture2D(uSampler, vTextureCoord);", "   float average = (color.r + color.g + color.b) / 3.0;", "   gl_FragColor = vec4(vec3(average * 10.0 - 5.0 + pattern()), color.a);", "}"]
    },b.DotScreenFilter.prototype = Object.create(b.AbstractFilter.prototype),b.DotScreenFilter.prototype.constructor = b.DotScreenFilter,Object.defineProperty(b.DotScreenFilter.prototype, "scale", {
        get: function () {
            return this.uniforms.scale.value
        }, set: function (a) {
            this.dirty = !0, this.uniforms.scale.value = a
        }
    }),Object.defineProperty(b.DotScreenFilter.prototype, "angle", {
        get: function () {
            return this.uniforms.angle.value
        }, set: function (a) {
            this.dirty = !0, this.uniforms.angle.value = a
        }
    }),b.CrossHatchFilter = function () {
        b.AbstractFilter.call(this), this.passes = [this], this.uniforms = {
            blur: {
                type: "1f",
                value: 1 / 512
            }
        }, this.fragmentSrc = ["precision mediump float;", "varying vec2 vTextureCoord;", "varying vec4 vColor;", "uniform float blur;", "uniform sampler2D uSampler;", "void main(void) {", "    float lum = length(texture2D(uSampler, vTextureCoord.xy).rgb);", "    gl_FragColor = vec4(1.0, 1.0, 1.0, 1.0);", "    if (lum < 1.00) {", "        if (mod(gl_FragCoord.x + gl_FragCoord.y, 10.0) == 0.0) {", "            gl_FragColor = vec4(0.0, 0.0, 0.0, 1.0);", "        }", "    }", "    if (lum < 0.75) {", "        if (mod(gl_FragCoord.x - gl_FragCoord.y, 10.0) == 0.0) {", "            gl_FragColor = vec4(0.0, 0.0, 0.0, 1.0);", "        }", "    }", "    if (lum < 0.50) {", "        if (mod(gl_FragCoord.x + gl_FragCoord.y - 5.0, 10.0) == 0.0) {", "            gl_FragColor = vec4(0.0, 0.0, 0.0, 1.0);", "        }", "    }", "    if (lum < 0.3) {", "        if (mod(gl_FragCoord.x - gl_FragCoord.y - 5.0, 10.0) == 0.0) {", "            gl_FragColor = vec4(0.0, 0.0, 0.0, 1.0);", "        }", "    }", "}"]
    },b.CrossHatchFilter.prototype = Object.create(b.AbstractFilter.prototype),b.CrossHatchFilter.prototype.constructor = b.BlurYFilter,Object.defineProperty(b.CrossHatchFilter.prototype, "blur", {
        get: function () {
            return this.uniforms.blur.value / (1 / 7e3)
        }, set: function (a) {
            this.uniforms.blur.value = 1 / 7e3 * a
        }
    }),b.RGBSplitFilter = function () {
        b.AbstractFilter.call(this), this.passes = [this], this.uniforms = {
            red: {type: "2f", value: {x: 20, y: 20}},
            green: {type: "2f", value: {x: -20, y: 20}},
            blue: {type: "2f", value: {x: 20, y: -20}},
            dimensions: {type: "4fv", value: [0, 0, 0, 0]}
        }, this.fragmentSrc = ["precision mediump float;", "varying vec2 vTextureCoord;", "varying vec4 vColor;", "uniform vec2 red;", "uniform vec2 green;", "uniform vec2 blue;", "uniform vec4 dimensions;", "uniform sampler2D uSampler;", "void main(void) {", "   gl_FragColor.r = texture2D(uSampler, vTextureCoord + red/dimensions.xy).r;", "   gl_FragColor.g = texture2D(uSampler, vTextureCoord + green/dimensions.xy).g;", "   gl_FragColor.b = texture2D(uSampler, vTextureCoord + blue/dimensions.xy).b;", "   gl_FragColor.a = texture2D(uSampler, vTextureCoord).a;", "}"]
    },b.RGBSplitFilter.prototype = Object.create(b.AbstractFilter.prototype),b.RGBSplitFilter.prototype.constructor = b.RGBSplitFilter,Object.defineProperty(b.RGBSplitFilter.prototype, "angle", {
        get: function () {
            return this.uniforms.blur.value / (1 / 7e3)
        }, set: function (a) {
            this.uniforms.blur.value = 1 / 7e3 * a
        }
    }),"undefined" != typeof exports ? ("undefined" != typeof module && module.exports && (exports = module.exports = b), exports.PIXI = b) : "undefined" != typeof define && define.amd ? define(b) : a.PIXI = b
}).call(this);